Yesterday I decided to modify a utlity I wrote to assist with copying Banner permissions from one user to another. I decided to add a list of the actual classes and objects that the destination user would receive as a result of the copy. This was a fairly easy modification, but as usual, I found myself spending most of my time on the easiest part of the project.
I naively assumed that C# would have some automagic way of display columns. While there may be a more official way to do it, nothing seemed to fit my scenario perfectly.
The average user has between 15 and 30 classes, but some have much more. I wanted to shorten the length, page wise, of the output. This was for purpose of readability. As I’m looping through a query result, my initial code looked something like this:
while (reader.Read()) { Console.WriteLine(reader[0].ToString()); }
I spent a good amount of time trying to use String.Format and things like it to try to turn this one column of output into two columns. The result? No success. Finally, I realized I was spending all my time trying to come up with the proper way to do something when there was most likely an easy, functional way to do this. I finally arrived at the following code:
int n = 0; while (reader.Read()) { if (n % 2 == 0) { Console.Write(reader[0].ToString().PadRight(30)); } else { Console.WriteLine(reader[0].ToString().PadRight(30)); } n++; }
The counter allows us to do an “every other time” operation by relying on whether or not the number is even or odd. Console.Write, as you should know, doesn’t append a return carriage, Console.WriteLine does.
PadRight(30) simply ensures that the output for each is a constant length. This prevents the “columns” from being misaligned.
There may be other, better ways to accomplish this. (And I welcome you to share them!) If you are dealing with a large amount of data and numerous columns, this is probably NOT the best approach. But if you’re looking for a functional, easy to implement means to an end, this may assist you.
#1 by Maayaa at October 19th, 2009
Looks like you are doing the same thing (PadRight) in both if and else sections. Did you want to PadLeft in one case and PadRight in the other case?