我正在使用CellClick打开一个消息框,并在表单中的DataGridView中显示单行的行内容。我很难找到比我到目前为止更优雅的东西。我正在寻找一种方法来显示列标题的内容和行值,可能使用foreach或for循环,但无济于事。有什么建议吗?
date = new SimpleDateFormat("dd/mm/yyyy").parse(temp);
答案 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帮助