我想在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);
我找到了这段代码there,但它创建了一个类似上图所示的列表框。有没有人知道这个?
答案 0 :(得分:4)
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();
}
<强>更新强>
您可能想要查看ListView而不是GridView或ListBox
检查此example,以便给出一个想法
或者这个更简单:Using ListView control in C#
有了这个,您还可以在不同的列中添加其他控件,如复选框
这比GridView相对轻量级。
答案 1 :(得分:0)
对于C#中ListBox中的MutliColumn,这样可以正常工作
listBox1.Items.AddRange(
new object[]
{
"Name","Aman"
}
);
答案 2 :(得分:0)
我认为您误解了ListBox中MultiColumn属性的用法。
多列列表框将项目放置在所需的尽可能多的列中,从而无需垂直滚动。
所以这只是避免滚动的事情。
如果要显示几列,每列显示单独的数据,建议您使用ListView。
答案 3 :(得分:-2)
我已经能够创建代码,以便可以从Excel电子表格中订购任何年份范围的日期。
Private Sub UserForm_Initialize()
With Me
.StartUpPosition = 0
'.Width = Application.Width * 0.46
'.Height = Application.Height * 0.57
.Left = Application.Left + (Application.Width * 0.7) \ 2
.Top = Application.Top + (Application.Height * 0.3) \ 2
End With
End Sub
Private Sub CommandButton1_Click()
initialize ("lth") 'Call rutine "initialize" to order listbox from down to up
End Sub
Private Sub CommandButton2_Click()
initialize ("htl") 'Call rutine "initialize" to order listbox from up to down
End Sub
Sub initialize(ByVal ordertype As String)
Dim x As Integer
Dim i As Integer
Dim fechas As Date
Dim datofecha As String
Dim arrayyear() As Date
Dim diasmesbisiesto(1 To 12) As Integer
Dim diasmesnobisiesto(1 To 12) As Integer
Dim lastrow As Integer
Dim mayoryear As Integer
Dim menoryear As Integer
Dim f As Integer
Dim c As Date
lastrow = Worksheets(1).Range("A" & Rows.Count).End(xlUp).Row
ReDim arrayyear(lastrow)
For u = 1 To lastrow
arrayyear(u) = Format(Sheet1.Cells(u, 1).Value, "dd/mm/yyyy")
Next u
'-------------------------
'Obtener mayor valor fecha
'-------------------------
Dim vm As Integer
Dim maxindex As Integer
maxindex = 1
For vm = 2 To UBound(arrayyear) 'suponemos indice desde 1 a n
If arrayyear(vm) > arrayyear(maxindex) Then
maxindex = vm
End If
Next
mayor = arrayyear(maxindex)
'-------------------------
'-------------------------
'Obtener menor valor fecha
'-------------------------
Dim vn As Integer
Dim minindex As Integer
minindex = 1
For vn = 2 To UBound(arrayyear) 'suponemos indice desde 1 a n
If arrayyear(minindex) < arrayyear(vn) Then
Else
minindex = vn
End If
Next
menor = arrayyear(minindex)
'-------------------------
menoryear = Year(menor) ' Asign the lowest year in menoryear
mayoryear = Year(mayor) ' Asign the highest year in mayoryear
ListBox1.Clear
'Carga vector diasmesbisiesto
'---------------------------
diasmesbisiesto(1) = 31
diasmesbisiesto(2) = 29
diasmesbisiesto(3) = 31
diasmesbisiesto(4) = 30
diasmesbisiesto(5) = 31
diasmesbisiesto(6) = 30
diasmesbisiesto(7) = 31
diasmesbisiesto(8) = 31
diasmesbisiesto(9) = 30
diasmesbisiesto(10) = 31
diasmesbisiesto(11) = 30
diasmesbisiesto(12) = 31
'---------------------------
'Carga vector diasmesnobisiesto
'---------------------------
diasmesnobisiesto(1) = 31
diasmesnobisiesto(2) = 28
diasmesnobisiesto(3) = 31
diasmesnobisiesto(4) = 30
diasmesnobisiesto(5) = 31
diasmesnobisiesto(6) = 30
diasmesnobisiesto(7) = 31
diasmesnobisiesto(8) = 31
diasmesnobisiesto(9) = 30
diasmesnobisiesto(10) = 31
diasmesnobisiesto(11) = 30
diasmesnobisiesto(12) = 31
'---------------------------
f = 0 'Variable para ubicar la ubicacion de la fila en donde se guardaran los datos en el listbox
cuenta = 0 ' Variable para contar la cantidad de elementos que se cargaron en el listbox
If ordertype = "lth" Then
GoTo 1 ' Ordering lowest to highest
End If
If ordertype = "htl" Then
GoTo 2 ' Ordering highest to lowest
End If
'---------------------------
' Ordering lowest to highest
'---------------------------
1:
For anio = menoryear To mayoryear
For mes = 1 To 12
If (anio Mod 4 = 0 And anio Mod 100 <> 0 Or anio Mod 400 = 0) Then
' Años bisiestos
diasmes = diasmesbisiesto(mes)
Else
' Años no bisiestos
diasmes = diasmesnobisiesto(mes)
End If
datofecha = Format(DateSerial(anio, mes, 1), "dd/mm/yyyy")
fechas = datofecha
'Carga del listbox
'------------------------------------------------------------------------------------------------------------
For x = 0 To diasmes - 1
For i = 1 To lastrow
c = fechas
If Format(Sheet1.Cells(i, 1), "dd/mm/yyyy") = c + x Then
Me.ListBox1.AddItem
Me.ListBox1.List(f, 0) = Format(Sheet1.Cells(i, 1), "dd/m/yyyy")
cuenta = cuenta + 1
For b = 1 To 1
Me.ListBox1.List(f, b) = Sheet1.Cells(i, b + 1)
Next b
f = f + 1
End If
Next i
Next x
'------------------------------------------------------------------------------------------------------------
Next mes
Next anio
Label2.Caption = "Number of Elements: " & cuenta
Label3.Caption = "Order from Lowest to Highest "
Exit Sub
'---------------------------
' Ordering highest to lowest
'---------------------------
2:
For anio = mayoryear To menoryear Step -1
For mes = 12 To 1 Step -1
If (anio Mod 4 = 0 And anio Mod 100 <> 0 Or anio Mod 400 = 0) Then
' Años bisiestos
diasmes = diasmesbisiesto(mes)
Else
' Años no bisiestos
diasmes = diasmesnobisiesto(mes)
End If
datofecha = Format(DateSerial(anio, mes, diasmes), "dd/mm/yyyy")
fechas = datofecha
'Carga del listbox
'------------------------------------------------------------------------------------------------------------
For x = 0 To diasmes - 1
For i = 1 To lastrow
c = fechas
If Format(Sheet1.Cells(i, 1), "dd/mm/yyyy") = c - x Then
Me.ListBox1.AddItem
Me.ListBox1.List(f, 0) = Format(Sheet1.Cells(i, 1), "dd/m/yyyy")
cuenta = cuenta + 1
For b = 1 To 1
Me.ListBox1.List(f, b) = Sheet1.Cells(i, b + 1)
Next b
f = f + 1
End If
Next i
Next x
'------------------------------------------------------------------------------------------------------------
Next mes
Next anio
Label2.Caption = "Number of Elements: " & cuenta
Label3.Caption = "Order from Highest to Lowest "
Exit Sub
End Sub