c# CheckedListbox 值

c# CheckedListbox values

当我想将值放入从选中列表框中选择的数组中时。然后说:

messagebox.show(values[0]);

它说:System.Data.DataRowView

这是我当前的代码:

        string[] itemArr = new string[clbTables.CheckedItems.Count];
        int counter = 0;
        foreach (object item in this.clbTables.CheckedItems)
        {
            string temp = Convert.ToString(item);
            itemArr[counter] = temp;
            counter++;
        }
        MetroMessageBox.Show(this, itemArr[0].ToString());

我做错了什么>?

编辑::

clbTables.DataSource = sqlDisplayContent.connectDataTable("SELECT ('Tafelnr: '+ CONVERT(varchar,tafelnr)+' Zitplaatsen: '+ CONVERT(varchar,zitPlaatsen)) AS dispValue,tafelnr  FROM tabel");
clbTables.DisplayMember = "dispValue";
clbTables.ValueMember = "tafelnr";



class sqlDisplayContent
        {
            public static DataTable connectDataTable(string query)
            {
                SqlCommand comm= sqlCrud.returnSqlCommand(query);
                SqlDataAdapter sda = new SqlDataAdapter(comm);
                DataTable dt = new DataTable();
                sda.Fill(dt);
                return dt;
            }
        }

Thankss

我想你的 values[] 数组不对。请参考 MSDN 上的这个例子。

https://msdn.microsoft.com/en-us/library/system.windows.forms.checkedlistbox.checkeditems(v=vs.110).aspx

问题是:

Convert.ToString(item);

将简单地调用对象的 ToString() 方法并存储它,在本例中,它为您提供对象的类型。在这种情况下,类型是 System.Data.DataRowView。我建议您使用以下方法访问所需行中的特定字段:

((DataRowView)item).Row["FieldName"].ToString();

相反。您需要将 "FieldName" 替换为您想要的列的任何名称。此外,您可以使用 int 索引而不是字符串引用。当然,如果需要访问多个字段,可以通过简单的字符串连接来实现。问题是您需要访问所需的特定字段。不是您当前所在的整行。

希望对您有所帮助!

一些参考文献:DataRow, DataRowView

string temp = ((CheckBox)item).Text;

您传递的是对象,而不是对象的文本(这似乎是您希望代码执行的操作)。