ListBox中的多列数据

sar*_*own 5 .net c# listbox multiple-columns winforms

我想在我的ListBox中有多列。以下是我在应用程序中获得的图片示例。

没有多列的列表框的图片

我实际上有大约7列,但是只打印了两列,以使其更易于理解。

因此,第一列会说date,第二列会说name。如您所见,数据没有进入自己的列。

这是我的代码:

this.listBox1 = new System.Windows.Forms.ListBox();
this.SuspendLayout();
// 
// listBox1
// 
this.listBox1.FormattingEnabled = true;
this.listBox1.HorizontalScrollbar = true;

foreach (XmlNode xn in xnList)
{
    string date = xn.OfType<XmlNode>().FirstOrDefault(n => n.Name == "Date").FirstChild.Value;
    string id = xn.OfType<XmlNode>().FirstOrDefault(n => n.Name == "ID").FirstChild.Value;
    if (date == cari)
    {
        this.listBox1.Items.AddRange(new object[] {                    
        //dateBox.Text,
        dateBox.Text + "\r\n" + date});

        this.listBox1.Items.AddRange(new object[] {                    
        "sarabrown"});
    }
}
this.listBox1.Location = new System.Drawing.Point(12, 28);
this.listBox1.MultiColumn = true;
this.listBox1.Name = "listBox1";
this.listBox1.ScrollAlwaysVisible = true;
this.listBox1.Size = new System.Drawing.Size(300, 95);
this.listBox1.TabIndex = 0;
this.listBox1.ColumnWidth = 100;
// 
// Form3
// 
this.ClientSize = new System.Drawing.Size(400, 273);
this.Controls.Add(this.listBox1);
this.Name = "Form3";
this.ResumeLayout(false);
Run Code Online (Sandbox Code Playgroud)

我发现这个代码存在,但它会创建一个列表框,看起来就像如上图。有谁知道吗?

Kas*_*ash 8

only的MultiColumn属性ListBox有助于避免垂直滚动,因此只是将溢出的项目堆叠到下一列中。默认情况下,您的要求在 .NET 中不可用。因此,您可能必须构建自己的自定义控件来支持它。

顺便说一句,GridView是你的朋友..你需要的很容易使用GridView. 例如,使其简单化(您可能需要完全调整以适应您的问题)

protected void MyGridView_PreRender(object sender, EventArgs e)
{
    DataSet myDataSet = new DataSet();
    myDataSet.ReadXml(new StringReader(myXmlDoc.OuterXml));
    GridView gv = (GridView)sender;
    gv.DataSource = myDataSet;
    gv.DataBind();
}
Run Code Online (Sandbox Code Playgroud)

更新:

您可能想签出ListView而不是GridViewListBox。它比GridView.

随着ListView你也可以把其他控件像复选框不同列。

看看这个例子给你一个想法。
或者这个更简单:在 C# 中使用 ListView 控件