Listbox.multicolumn属性whit SQL查询 [英] Listbox.multicolumn property whit SQL query
问题描述
任何人都可以帮我解决下面的代码。我想制作一个MultiColumn列表框。
我已经调整了我的标准代码,但这给了我一个Collom数据列表框中的数据(IDMateriaal)。
如何自定义下面的代码以获取不同组合的数据。
ListBoxMateriaal
|| IDMateriaal | Omschrijving | Omschrijving2 ||
Can anyone help me with the code below. I want to make a MultiColumn listbox.
I have adapt my standard code but this give me one Collom with data in my listbox with data (IDMateriaal).
How do I customize the code below to get the data in different collems.
ListBoxMateriaal
|| IDMateriaal | Omschrijving | Omschrijving2 ||
private void MateriaalBOX()
{
using (connection = new SqlConnection(connectionstring))
using (SqlDataAdapter adapter = new SqlDataAdapter("select [IDMateriaal],Omschrijving, Omschrijving2 from Materiaal ORDER BY Omschrijving ASC", connection))
try
{
DataTable materiaallijst = new DataTable();
adapter.Fill(materiaallijst);
//
ListBoxMateriaal.HorizontalScrollbar = true;
ListBoxMateriaal.FormattingEnabled = true;
ListBoxMateriaal.MultiColumn = true;
ListBoxMateriaal.ScrollAlwaysVisible = true;
ListBoxMateriaal.TabIndex = 0;
//
//ListBoxMateriaal.DisplayMember = "Omschrijving";
ListBoxMateriaal.ValueMember = "IDMateriaal";
ListBoxMateriaal.Items.AddRange(new object[]
{
"IDMateriaal, IDMateriaal",
"Omschrijving, Omschrijving",
"Omschrijving2, Omschrijving2",
});
ListBoxMateriaal.DataSource = materiaallijst;
}
我的尝试:
https://msdn.microsoft.com/en-us/library/system.windows.forms.listbox.multicolumn(v=vs.110).aspx
What I have tried:
https://msdn.microsoft.com/en-us/library/system.windows.forms.listbox.multicolumn(v=vs.110).aspx
推荐答案
对于ListBoxMulticolumn = true
只需将(单列)数据推送到另一列而不是使用滚动条。
而不是使用ListBox使用List View 例如
For a ListBoxMulticolumn = true
just pushes the (single column of) data into another column instead of using a scrollbar.
Instead of using a ListBox use a ListView e.g.
private void MateriaalBOX()
{
ListBoxMateriaal.TabIndex = 0;
ListBoxMateriaal.Items.Clear();
ListBoxMateriaal.View = View.Details;
ListBoxMateriaal.Columns.Add("IDMateriaal");
ListBoxMateriaal.Columns.Add("Omschrijving");
ListBoxMateriaal.Columns.Add("Omschrijving2");
using (var connection = new SqlConnection(connectionstring))
{
var query = "select [IDMateriaal],Omschrijving, Omschrijving2 from Materiaal ORDER BY Omschrijving ASC";
using (var adapter = new SqlDataAdapter(query, connection))
{
try
{
DataTable materiaallijst = new DataTable();
adapter.Fill(materiaallijst);
for (int i = 0; i < materiaallijst.Rows.Count; i++)
{
DataRow dr = materiaallijst.Rows[i];
ListViewItem listitem = new ListViewItem(dr["IDMateriaal"].ToString());
listitem.SubItems.Add(dr["Omschrijving"].ToString());
listitem.SubItems.Add(dr["Omschrijving2"].ToString());
ListBoxMateriaal.Items.Add(listitem);
}
..etc
或者您可以使用DataGridView来显示数据。
唯一的其他选择我能想到的是写一个自定义控件。
Alternatively you could use a DataGridView to display the data.
The only other alternative I can think of would be to write a custom control.
想要将IDMateriaal字段用作SelectedValue,因为在我的最终解决方案中,我不需要ID字段可视化..是这可能吗?
want to use the IDMateriaal field as SelectedValue, because in my final solution, I don't need the ID field be visualized.. Is this possible?
是的。我建议对上面提供的代码进行以下更改:
Yes. I suggest the following changes to the code I offered above:
//ListBoxMateriaal.Columns.Add("IDMateriaal"); //Don't need a column for the ID
ListBoxMateriaal.Columns.Add("Omschrijving");
ListBoxMateriaal.Columns.Add("Omschrijving2");
ListBoxMateriaal.MultiSelect = false; //Only select one row
ListBoxMateriaal.FullRowSelect = true; //Select the whole row, not just column 1
using (var connection = new SqlConnection(connectionstring))
{
var query = "select [IDMateriaal],Omschrijving, Omschrijving2 from Materiaal ORDER BY Omschrijving ASC";
using (var adapter = new SqlDataAdapter(query, connection))
{
try
{
DataTable materiaallijst = new DataTable();
adapter.Fill(materiaallijst);
for (int i = 0; i < materiaallijst.Rows.Count; i++)
{
DataRow dr = materiaallijst.Rows[i];
ListViewItem listitem = new ListViewItem(dr["Omschrijving"].ToString()); //Note item in now based on this column
listitem.SubItems.Add(dr["Omschrijving2"].ToString());
listitem.Tag = dr["IDMateriaal"]; // Store the ID for later on
ListBoxMateriaal.Items.Add(listitem);
}
您可以像这样
private void ListBoxMateriaal_SelectedIndexChanged(object sender, EventArgs e)
{
lblSelected.Text = (ListBoxMateriaal.SelectedItems.Count > 0) ? ListBoxMateriaal.SelectedItems[0].Tag.ToString() : "Nothing Selected";
}
private void MateriaalBOX()
{
ListBoxMateriaal.TabIndex = 0;
ListBoxMateriaal.Items.Clear();
ListBoxMateriaal.View = View.Details;
ListBoxMateriaal.Columns.Add("Materiaalgroep");
ListBoxMateriaal.Columns.Add("Omschrijving");
ListBoxMateriaal.Columns.Add("Omschrijving2");
ListBoxMateriaal.Columns.Add("Datum_wijziging");
ListBoxMateriaal.MultiSelect = false;
ListBoxMateriaal.FullRowSelect = true;
using (var connection = new SqlConnection(connectionstring))
{
var query = "SELECT [IDMateriaal], Omschrijving, Omschrijving2, Datum_wijziging FROM Materiaal WHERE Omschrijving like (@Omschrijving) order by Omschrijving ASC";
using (var adapter = new SqlDataAdapter(query, connection))
{
SqlParameter parm = adapter.SelectCommand.Parameters.AddWithValue("@Omschrijving", "%" + TX_Materiaalstuk_Zoeken.Text + "%");
try
{
DataTable materiaallijst = new DataTable();
adapter.Fill(materiaallijst);
for (int i = 0; i < materiaallijst.Rows.Count; i++)
{
DataRow dr = materiaallijst.Rows[i];
ListViewItem listitem = new ListViewItem(dr["IDMateriaal"].ToString());
listitem.SubItems.Add(dr["Omschrijving"].ToString());
listitem.SubItems.Add(dr["Omschrijving2"].ToString());
listitem.SubItems.Add(dr["Datum_wijziging"].ToString());
listitem.Tag = dr["IDMateriaal"]; // Store the ID for later on
ListBoxMateriaal.Items.Add(listitem);
ListBoxMateriaal.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
ListBoxMateriaal.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.StackTrace);
Console.WriteLine(ex.Message);
}
}
}
ListBoxMateriaal.Columns[3].Width = 0;
}
private void ListBoxMateriaal_SelectedIndexChanged(object sender, EventArgs e)
{
lblSelected.Text = (ListBoxMateriaal.SelectedItems.Count > 0) ? ListBoxMateriaal.SelectedItems[0].Tag.ToString() : "";
LB_WijzigingingsDatum.Text = (ListBoxMateriaal.SelectedItems.Count > 0) ? ListBoxMateriaal.SelectedItems[0].SubItems[3].Text : "";
}
这篇关于Listbox.multicolumn属性whit SQL查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!