【问题标题】:getting indivdul cell from DataTable from CellClickEvent从 CellClickEvent 的 DataTable 中获取单个单元格
【发布时间】:2017-05-24 09:58:13
【问题描述】:

我是 DataTables 的新手,我正在尝试访问与行和 colls 相对的单个单元格。我通过 findResult 插入了一组数据 这是来自现有的 web 服务。我现在正在尝试访问“Id”列,但是用户将单击的单个单元格。然后,我会将其存储在一个 var 中,以用于在类中进行进一步处理。

我已按如下方式填充了我的数据表:

            DataTable ss = new DataTable();
            ss.Columns.Add("ID");
            ss.Columns.Add("Text");
            ss.Columns.Add("Highlight");
            ss.Columns.Add("Cursor");
            ss.Columns.Add("Description");
            ss.Columns.Add("Next");

            DataRow row = ss.NewRow();
            row["ID"] = findResults[0].Id;
            row["Text"] = findResults[0].Text;
            row["Highlight"] = findResults[0].Highlight;
            row["Cursor"] = findResults[0].Cursor;
            row["Description"] = findResults[0].Description;
            row["Next"] = findResults[0].Next;
            ss.Rows.Add(row);

            if (txt_Search.Text.Length <= 2 || txt_Search.Text.Length >= 9)
            { MessageBox.Show("Please enter more than 2 Chars!!"); }

            foreach (DataRow itemDrow in ss.Rows)
            {

                foreach (var item in findResults)
                {
                    var num = dataGridView1.Rows.Add();
                    dataGridView1.Rows[num].Cells[0].Value = item.Id.ToString();
                    dataGridView1.Rows[num].Cells[1].Value = item.Text.ToString();
                    dataGridView1.Rows[num].Cells[2].Value = item.Highlight.ToString();
                    dataGridView1.Rows[num].Cells[3].Value = item.Cursor.ToString();
                    dataGridView1.Rows[num].Cells[4].Value = item.Description.ToString();
                    dataGridView1.Rows[num].Cells[5].Value = item.Next.ToString();
                }
            }

这就是我尝试实现点击事件的方式,但它只返回变量“ID”的第一行和第一列,而不是记录我点击了另一个单元格。

 private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
    {
        foreach (DataGridViewRow row in dataGridView1.SelectedRows)
        {
            string value1 = row.Cells[0].Value.ToString();
            string value2 = row.Cells[1].Value.ToString();
            string SerachId = findResults[0].Id.ToString();
            Console.WriteLine(SerachId);
            //...
        }

【问题讨论】:

    标签: c# winforms collections datatable


    【解决方案1】:

    CellClick 事件中的DataGridViewCellEventArgs 公开了两个属性:ColumnIndexRowIndex,它们将告诉您用户单击了哪个单元格。一旦你有了DataGridViewCell,就很容易得到Value

    例子:

    var clickedCell = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];
    var value = clickedCell.Value;
    

    【讨论】:

    • 干杯这让我得到了 coll 和 row 的索引,但是如何使用索引来访问该特定单元格中的数据?我应该使用 for 循环来迭代吗?这就是我在输出 DataGridViewTextBoxCell { ColumnIndex=0, RowIndex=5 } 中得到的
    • @whatdoyouNeedFromMe 使用 Value 属性。
    • 干杯已经找到了谢谢你的回答很有帮助
    【解决方案2】:

    在玩了一会儿并使用@Kempeths 响应后,我解决了如下问题,现在可以打印出双击的每个单元格中的信息,谢谢:

     public void dataGridView1_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            var clickedCell = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
            if (clickedCell != null)
            {
                MessageBox.Show(dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString());
                string SerachId = clickedCell.ToString();
            }
    

    【讨论】:

      猜你喜欢
      • 2018-05-30
      • 2011-06-07
      • 1970-01-01
      • 2011-03-12
      • 2018-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多