【问题标题】:How to fix the length for the string builder string in Winform C#?如何在 Winform C# 中修复字符串生成器字符串的长度?
【发布时间】:2016-10-09 19:22:03
【问题描述】:

在我的项目中,我使用StringBuilderRichEditBox 中创建一个表。但在我的专栏中,数据值彼此不同。所以它看起来像打乱的数据。但是我的例外输出是完美地固定表中数据的长度。我可以在输出中看到表格已正确完成。

谁能说出如何在 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);
        }

预期结果:

                                   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 ]*************

【问题讨论】:

  • 如果您使用的是 Windows 窗体,为什么要尝试在 RichEditBox 中执行所有操作?看起来某种数据网格会更合适。

标签: c# formatting stringbuilder


【解决方案1】:

不要使用 TAB 来对齐列,而是使用 StringBuilder 的 Composite FormattingAppendFormat 方法

仅作为第一列的示例。
我想ExamName 应该左对齐插入到一个大 20 个字符的列中。
你可以写

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

Grade 列在 6 个字符空间中右对齐

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

当然,这种对齐方式取决于 RichTextBox 中使用的字体类型。如果您使用比例字体,则无法以您喜欢的方式对齐此文本。

最后我真的建议你改用 DataGridView

【讨论】:

    【解决方案2】:

    由于你的数据长度波动很大,所以不要加tabs“\t”,如果有的数据比tabsize长这个就不行了

    你可以使用

    String.PadRight(Int32, Char) 
    

    如果您知道最大预期数据长度的方法。

    记住用法:第一个参数描述的是总长度而不是要填充的字符数

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

    【讨论】:

    • 我没有最大数据长度,所以我现在可以这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多