DataGridView检索整行

时间:2017-07-07 01:39:08

标签: c# datagridview

我正在使用CellClick打开一个消息框,并在表单中的DataGridView中显示单行的行内容。我很难找到比我到目前为止更优雅的东西。我正在寻找一种方法来显示列标题的内容和行值,可能使用foreach或for循环,但无济于事。有什么建议吗?

date = new SimpleDateFormat("dd/mm/yyyy").parse(temp);

3 个答案:

答案 0 :(得分:0)

您可以获得对该行的引用,这可以简化它。

DataGridViewRow authorRow = authorDataGridView.Rows[e.RowIndex];
if (authorRow.Cells[e.ColumnIndex].Value != null)
{
    MessageBox.Show("Author Number: " + authorRow.Cells[0].Value.ToString()
            + "\nAuthor First Name: " + authorRow.Cells[1].Value.ToString()
            + "\nAuthor Last Name: " + authorRow.Cells[2].Value.ToString());
}

如果你想要列标题文本,我认为它是:

DataGridViewColumn col = authorDataGridView.Column[e.ColumnIndex]

然后您可以从以下位置获取标题文字:

col.HeaderText;

如果你要做很多这样的事情,你可以在功能中封装你想要的东西:

    public string ParseRowText(DataGridView grid, DataGridViewCellEventArgs e)
    {
        DataGridViewRow row = grid.Rows[e.RowIndex];
        string output = "";
        for (int col = 0; col < grid.Columns.Count; col++)
        {
            //Get column header and cell contents
            output = output + grid.Columns[col].HeaderText + ": " + row.Cells[col].Value.ToString() + Environment.NewLine;
        }
        return output;
    }

这是你之后的事情,列标题是&#34;作者编号&#34;,&#34;作者名字&#34;,&#34;作者姓氏&# 34;等?

然后您通过以下方式致电:

private void authorDataGridView_CellClick(object sender, DataGridViewCellEventArgs e)
{
    MessageBox.Show(ParseRowText(this, e));
}

答案 1 :(得分:0)

您可以在Dgv中显示的对象的模型类中添加Show方法:

public class Author
{
  public int Number { get; set; }
  public string FirstName { get; set; }
  public string LastName { get; set; }

  public void Show()
  {
    MessageBox.Show($"Author Number: {Number}\nAuthor First Name: {FirstName}\nAuthor Last Name: {LastName}");
  }

这样您就可以在CellClick-Method

中轻松调用它
private void authorDataGridView_CellClick(object sender, DataGridViewCellEventArgs e)
{
  var author = ((DataGridView)sender).Rows[e.RowIndex].DataBoundObject
  //now you have an author-type object and just call your show method
  author.Show()
}

只要您使用DataSource prop将项目放入Dgv,您就可以使用DataBoundObject属性再次将它们恢复。

答案 2 :(得分:0)

鉴于你正在使用BindingSource,你也可以使用BindingSource.Current属性实现这一点 - 实际上我更喜欢这个,因为你将能够从任何其他事件/方法访问DataGridView中当前选定的Row(例如按钮点击。)

private void btnShow_Click(object sender, EventArgs e)
{
    var currentAuthor = (Author)authorBindingSource.Current;
    MessageBox.Show(currentAuthor.Name);
}

要以所需格式显示作者的属性,您可以覆盖ToString()方法,然后只执行MessageBox.Show(currentAuthor.ToString())。

public class Author
{
    public int Number { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public override string ToString()
    {
        return $"Author Number: {Number}\nAuthor First Name: {FirstName}\nAuthor Last Name: {LastName}";
    }
}

有关详细信息BindingSource.Current

,请参阅此MSDN帮助