web-dev-qa-db-ja.com

ListBoxの複数列のデータ

リストボックスに複数列を入れたいのですが。以下は、アプリケーションで取得した画像の例です。

Picture of a ListBox that does not have multi-columns

実は7列くらいありますが、わかりやすくするために2列しか印刷していません。

したがって、最初の列はdateと表示され、2番目の列は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);

このコードを見つけました そこに 、しかしそれは上の写真のように見えるリストボックスを作成します。これについて知っている人はいますか?

5
sara brown

ListBoxのMultiColumnプロパティは、垂直スクロールを回避するのに役立つだけなので、オーバーフローしたアイテムを次の列にスタックするだけです。 .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();
}

更新:
GridViewやListBoxの代わりにListViewをチェックアウトすることをお勧めします。
これをチェックしてください アイデアを出してください。
またはもっと単純なもの: C#でListViewコントロールを使用
これを使用すると、チェックボックスなどのさまざまな列に他のコントロールを配置することもできます。
これはGridViewよりも比較的軽量です。

4
Kash

C#のListBoxのMutliColumnの場合、これは正常に機能しています

listBox1.Items.AddRange(
    new object[]
    {
        "Name","Aman"

    }
);
0
Aman Dhally

ListBoxのMultiColumnプロパティの使用法を誤解していると思います。

MSDNから:

複数列のListBoxは、垂直スクロールを不要にするために必要な数の列にアイテムを配置します。

したがって、これはスクロールを避けるためのものです。

複数の列を表示し、各列に個別のデータを表示する場合は、 ListView を使用することをお勧めします。

0
Martin Verjans