【问题标题】:c# CheckedListbox valuesc# CheckedListbox 值
【发布时间】:2015-06-15 13:33:33
【问题描述】:

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

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

【问题讨论】:

  • 我在你的代码中没有看到messagebox.show(values[0]);...
  • 您将整个对象作为项目返回(而不是对象文本值)
  • 这里有一个很好的例子:msdn.microsoft.com/en-us/library/…
  • item 是 System.Data.DataRowView 而 ToString() 是 System.Data.DataRowView
  • 你应该把object item in this.clbTables.CheckedItems改成var item in this.clbTables.CheckedItems

标签: c# checkedlistbox


【解决方案1】:

问题是:

Convert.ToString(item);

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

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

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

我希望这会有所帮助!

几个参考:DataRowDataRowView

【讨论】:

  • 好的。那是我的错。我的印象是checkedItems 将是行的集合。我做了更多的研究,而不是说item.Row["FieldName"].ToString(),试试((DataRowView)item).Row.Item["FieldName"].ToString();。您需要将“FieldName”替换为您想要的列名。此外,您可以改用 int 索引。参考文献:DataRowDataRowView
  • 我为这些问题道歉。试试((DataRowView)item).Row["FieldName"].ToString();。如果这不起作用,我将删除我的帖子,以免再用错误的答案打扰您。
  • 不客气。我很高兴我们成功了。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:
    string temp = ((CheckBox)item).Text;
    

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

    【讨论】:

    • 当我这样做时它告诉我:“附加信息:无法将类型为 'System.Data.DataRowView' 的对象转换为类型 'System.Windows.Forms.CheckBox'。”
    • @Jamie,哦!好的,你能更新你的代码来告诉我们 CheckedListBox 是在哪里实现到 DataGrid 中的吗?
    • @Jamie,我在这里找到了一些代码,您可以使用它们来获取包含文本的对象。我不确定如何获取文本,但它应该很简单,通过 Visual Studio 向您展示。 stackoverflow.com/questions/21450681/…
    • 谢谢,但这只是问题所在...我无法从对象中获取文本。它的意思是:“System.Data.DataRowView”。
    • 好的,那么您在每个数据行中都有一个选中列表框吗?如果是这种情况,那么您需要循环每一行,循环选中列表框中的每个选中项,然后将每个复选框的文本添加到您的字符串数组中。这可能是缺少的一步。 @杰米
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多