【问题标题】:Reading from DataGridView从 DataGridView 读取
【发布时间】:2014-04-05 19:47:21
【问题描述】:

我有一个DataGridView,其中包含来自我的 SQL 的信息:

[只能点击整行而不是单元格,如图所示]

我尝试了一些来自:Reading data from DataGridView in C# 的代码示例,但它对我的问题不起作用。

我试试这个,因为它看起来不错

dataGridView.Rows[MyIndex].Cells["MessageHeadline"].Value.ToString();

但我得到一个错误。

现在我想获取索引(添加 1,因为它以 0 开头),如果我按下一行,我的程序应该从我的 DataGridView 获取信息并返回。

【问题讨论】:

  • but i get an Error. - 什么错误?
  • 如果您只能选择 1 行,您可以尝试i = dataGridView.SelectedRow[0].Cells[0].Value.ToString()。然后i 将是 1.(来自你的图片)。
  • @Acme "System.ArgumentException" in System.Windows.Forms.dll
  • @Georgi 工作不清楚,因为我需要直接从“MessageHeadline”或“MessageText”获取值,因为它们之间有一些不可见
  • 好的,然后像你一样 dataGridView.SelectedRow[0].Cells["MessageHeadline"].Value.ToString() 。我用一个按钮试了一下,效果很好。请告诉它对你有用吗?

标签: c# sql winforms datagridview


【解决方案1】:

尝试使用CurrentRow 而不是SelectedRow。仅当您从RowHeader 中选择行或RowSelection 属性设置为FullRowSelect 时,所选行才会执行。但是, CurrentRow 实际上是集中行。即使您只选择了单个单元格,您也可以获得价值。

dataGridView.CurrentRow.Cells["MessageHeadline"].Value.ToString()

【讨论】:

  • 是的,这似乎是更好的解决方案。
  • @Georgi 重要提示:它仅在您转到 DataGridView 并编辑您的标头的 Name 时才有效,否则您会遇到异常并且它不起作用,因为它找不到“MessageHeadline”在你的DataGridView! @Nimesh:工作得很好。短而清晰!不错:)
  • 从gridview读取数据前需要检查CurrentRow是否存在或者为null。
  • 我已经这样做了,所以用户必须先“更新”DataGridView(用所有数据填充它)。在此之后,用户可以从中读取
【解决方案2】:

试试这个:

将 datagridview 的 SelectionMode 属性设置为 CellSelect。现在您将能够选择一个单元格本身。

CellMouseClick事件中:

private void MyGridView_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
    string FullContent = "";
    for (int i = 0; i < MyGridView.Columns.Count; i++)
    {
        FullContent += MyGridView.Rows[e.RowIndex].Cells[i].Value.ToString() + "^";
    }
    FullContent = FullContent.Substring(0, Content.Length - 1);
    string[] Content=FullContent.Split('^')
}

现在您可以从 Content 数组中获取每一列的内容。 喜欢:

Content[0],Content[1],Content[2],etc.

例如,如果您单击 datagridview 中的第一行。 您可以访问以下内容:

FullContent;  //1^Test BGW 1^Test^All^12.05.2014^.....

拆分内容:

Content[0];   //1
Content[1];   //Test BGW 1
Content[2];   //Test
Content[3];   //All
Content[4];   //12.05.2014

【讨论】:

  • 会工作,但不清楚我想要什么,因为“用户”应该只能点击一整行,然后它应该给我所有需要的东西
  • 看看 Nimesh,这个例子(读 cmets)更短,效果很好!感谢您的帮助:)
【解决方案3】:

只使用foreach循环就可以解决问题。

        foreach (DataGridViewRow row in gridStore.Rows)
        {
            MessageBox.Show(row.Cells[2].Value.ToString());    //row.Cell[index Here!]
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 2021-03-27
    • 1970-01-01
    相关资源
    最近更新 更多