For a ListBox
Multicolumn = true
just pushes the (single column of) data into another column instead of using a scrollbar.
Instead of using a ListBox use a List
View 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
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.
[EDIT - response to OP's comment is easier here than in comments]
Quote:
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("Omschrijving");
ListBoxMateriaal.Columns.Add("Omschrijving2");
ListBoxMateriaal.MultiSelect = false;
ListBoxMateriaal.FullRowSelect = true;
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());
listitem.SubItems.Add(dr["Omschrijving2"].ToString());
listitem.Tag = dr["IDMateriaal"];
ListBoxMateriaal.Items.Add(listitem);
}
And you can get to the id of the selected row like this
private void ListBoxMateriaal_SelectedIndexChanged(object sender, EventArgs e)
{
lblSelected.Text = (ListBoxMateriaal.SelectedItems.Count > 0) ? ListBoxMateriaal.SelectedItems[0].Tag.ToString() : "Nothing Selected";
}
[EDIT - changes after OP comments]
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"];
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 : "";
}