2013-05-27 42 views
0

在我的项目中,我使用StringBuilderRichEditBox中创建了一个表格。但在我的专栏中,数据的价值各不相同。所以它看起来像洗牌数据。但是我的例外输出是完美地修复表格中数据的长度。我可以看到表格在输出中正确完成。如何修复Winform C#中字符串生成器字符串的长度?

谁能说如何解决C#中StringBuilder字符串的长度问题?

我的代码:

Connection(); 

try 
{ 
    string Today = "Student Test Mark Details"; 
    string Line = "----------------------------------"; 

    SqlCommand cmd = new SqlCommand(); 
    cmd.CommandType = CommandType.Text; 

    cmd = new SqlCommand("select ExaminationName, ExaminationCenter, ExaminationDate, Subjects, MarkObtained, Total, Percentage, Grade from StudentMarksHistory where StudentCode='" + ICBEStudentCode.Text + "' and ExaminationName='" + TBExaminationName.Text + "' and ClassName='" + ICBEClassSection.Text + "' and Remark='Record Saved'", cs); 

    StringBuilder paragraph = new StringBuilder(); 
    SqlDataReader dr = cmd.ExecuteReader(); 

       paragraph.Append(Today).Append("\t\n"); 
       paragraph.Append(Line).Append("\t\n\n\n\n\n"); 

       paragraph.Append("ExamName").Append("\t"); 
       paragraph.Append("ExamCenter").Append("\t"); 
       paragraph.Append("ExamDate").Append("\t"); 
       paragraph.Append("Subject").Append("\t\t\t"); 
       paragraph.Append("Mark").Append("\t"); 
       paragraph.Append("Total").Append("\t"); 
       paragraph.Append("Percentage").Append("\t"); 
       paragraph.Append("Grade").Append("\n\n"); 

       while (dr.Read()) 
       { 
        DateTime DateName = Convert.ToDateTime(dr["ExaminationDate"]); 
        string subject = dr["Subjects"].ToString().Trim(); 
        //int Len = subject.Length; 
        //subject = subject.ToString().PadRight(50 - Len, ' '); 
        paragraph.Append(dr["ExaminationName"].ToString()).Append("\t"); 
        paragraph.Append(dr["ExaminationCenter"].ToString()).Append("\t"); 
        paragraph.Append(DateName.ToString("dd/MM/yyyy")).Append("\t"); 
        paragraph.Append(subject); 
        paragraph.Append(' ', 15 - subject.Length); 
        //paragraph.Append(subject.PadRight(100)); 
        paragraph.Append(dr["MarkObtained"].ToString()).Append("\t"); 
        paragraph.Append(dr["Total"].ToString()).Append("\t"); 
        paragraph.Append(dr["Percentage"].ToString()).Append("\t"); 
        paragraph.Append(dr["Grade"].ToString()).Append("\n"); 
       } 
       string Notes = "************[ Minimum Pass Mark is 35 ]*************"; 
       paragraph.Append(" ").Append("\n\n\n\n"); 
       paragraph.Append(Notes).Append("\r\n"); 
       dr.Close(); 
       cs.Close(); 
      } 
      RTBMessage.Text = paragraph.ToString(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 

结果expceted:

        Student Test Mark Details 
           ---------------------------------- 


ExamName  ExamCenter  ExamDate  Subject     Mark Total 

Class Test 1 Room No1  24/05/2013  STOREDPROCEDURE   97  404 
Class Test 1 Room No1  25/05/2013  DOTNET     86  404  
Class Test 1 Room No1  26/05/2013  TAMIL     80  404   
Class Test 1 Room No1  23/05/2013  SOCIAL     80  404          
Class Test 1 Room No1  27/05/2013  COMPUTER     61  404   



          ************[ Minimum Pass Mark is 35 ]************* 
+2

?它看起来像某种数据网格会更合适。 –

回答

3

不要使用制表符对齐的列,但使用Composite Formatting通过的StringBuilder的

AppendFormat方法只作为一个例子你的第一列。
我想ExamName应该插入一个大的20个字符列中左对齐。
你可以写

paragraph.AppendFormat("{0:20}","ExamName"); 

而在6字符空间

paragraph.AppendFormat("{0:-6}\r\n", "Total"); 

当然对准Grade列权这种alignement的是依赖于RichTextBox中使用的那种字体。如果您使用比例字体,则无法按照您喜欢的方式对齐该文本。

最后我真的建议你使用一个DataGridView代替

0

随着数据的lenght非常波动,不添加标签“\ t”的,这是不行的,如果一些数据比TABSIZE长

如果你知道你最大的预期数据长可以使用

String.PadRight(Int32, Char) 

方法。

记住用法:第一个参数描述了总lengt没有的字符数,如果你正在使用Windows窗体,为什么你试图做一个RichEditBox应有尽有

http://msdn.microsoft.com/en-us/library/66f6d830(v=vs.71).aspx

+0

我不会没有最大数据长度,所以我现在可以为此做些什么。 – kalai

+0

通过数据两次 – Muetze

相关问题