C# 表单加载C时无法检查DataGridView行是否选中#
我想在表单加载时检查DataGridView行是否选中以执行某些操作,但在使用以下代码时,它对我无效:C# 表单加载C时无法检查DataGridView行是否选中#,c#,datagridview,C#,Datagridview,我想在表单加载时检查DataGridView行是否选中以执行某些操作,但在使用以下代码时,它对我无效: private void btnEdit_Click(object sender, EventArgs e) { if (grdInvoiceDetails2.Rows.Count > 0 && grdInvoiceDetails2.SelectedRows.Count > 0) {
private void btnEdit_Click(object sender, EventArgs e)
{
if (grdInvoiceDetails2.Rows.Count > 0 && grdInvoiceDetails2.SelectedRows.Count > 0)
{
try
{
Them = false;
var r = grdInvoiceDetails2.CurrentCell.RowIndex;
txtQty.Text = grdInvoiceDetails2.Rows[r].Cells[3].Value.ToString();
cboInvNo.SelectedValue = grdInvoiceDetails2.Rows[r].Cells[1].Value.ToString();
cboItemName.SelectedValue = grdInvoiceDetails2.Rows[r].Cells[2].Value.ToString();
cboItemName.Enabled = true;
cboInvNo.Enabled = false;
txtQty.Enabled = true;
btnSave.Enabled = true;
btnCancel.Enabled = true;
btnAdd.Enabled = false;
btnEdit.Enabled = false;
btnDelete.Enabled = false;
btnBack.Enabled = false;
LoadDataToCollection();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
调试时,grdInvoiceDetails2.Rows.Count=6,grdInvoiceDetails2.SelectedRows.Count=1
但是如果我没有单击任何一行,它将抛出一个异常。因为grdInvoiceDetails2.CurrentCell=null。事件发生在窗体第一次显示之前,所有初始化都发生在该时间。不建议将DataGridView
特定逻辑放在Load
事件中(大多数控件仍可能正在初始化)
我建议你接受并玩弄你的逻辑
dataGridView1.DataBindingComplete += dataGridView1_DataBindingComplete;
private void dataGridView1_DataBindingComplete(object sender,
DataGridViewBindingCompleteEventArgs e)
{
// logic here.
}
事件在窗体第一次显示之前发生,此时所有初始化都会发生。不建议将DataGridView
特定逻辑放在Load
事件中(大多数控件仍可能正在初始化)
我建议你接受并玩弄你的逻辑
dataGridView1.DataBindingComplete += dataGridView1_DataBindingComplete;
private void dataGridView1_DataBindingComplete(object sender,
DataGridViewBindingCompleteEventArgs e)
{
// logic here.
}
您必须检查(grdInvoiceDetails2.SelectedRows.Count>0),然后才能调用grdInvoiceDetails2.CurrentCell,否则会看到null,结果是异常。在表单加载期间,没有选择的行。只有在单击行或设置SelectedRow时才会发生这种情况。但这种情况在表单加载后很久就会发生。您必须检查(grdInvoiceDetails2.SelectedRows.Count>0),然后才能调用grdInvoiceDetails2.CurrentCell,否则会看到null,结果是异常。在表单加载期间,没有选择的行。只有在单击行或设置SelectedRow时才会发生这种情况。但这发生在Form_LoadI找不到DataBindingComplete事件很久之后。它在哪里?我使用的是.NET 4.5。您检查了吗?我明白了,但当我单击“编辑”按钮将数据从DataGridView行加载到表单时,我无法使用此代码。我只是想检查用户是否没有单击任何DataGridView行“不做任何其他事情”将数据加载到窗体。您提到“我想在窗体加载时检查DataGridView行是否选中”所以我认为您想放置一些逻辑,如果您只是在单击“编辑”按钮时查找逻辑以检查行是否选中,只要使用
if(grdInvoiceDetails2.SelectedRows!=null&&grdInvoiceDetails2.SelectedRows.Count>0)
当我按照您的建议更改代码时,它不起作用,什么也没有发生。private void btnEdit_Click(对象发送者,事件参数){if(grdInvoiceDetails2.SelectedRows!=null&&grdInvoiceDetails2.SelectedRows.Count>0){//some stuff}。因为grdInvoiceDetails2.SelectedRows!=null始终返回true我找不到DataBindingComplete事件。它在哪里?我使用的是.NET 4.5。您检查了吗?我明白了,但当我单击“编辑”按钮将数据从DataGridView行加载到表单时,我无法使用此代码。我只是想检查用户是否没有单击任何DataGridView行“不做任何其他事情”将数据加载到窗体。您提到“我想在窗体加载时检查DataGridView行是否选中”所以我认为您想放置一些逻辑,如果您只是在单击“编辑”按钮时查找逻辑以检查行是否选中,只要使用if(grdInvoiceDetails2.SelectedRows!=null&&grdInvoiceDetails2.SelectedRows.Count>0)
当我按照您的建议更改代码时,它不起作用,什么也没有发生。private void btnEdit_Click(对象发送者,事件参数){if(grdInvoiceDetails2.SelectedRows!=null&&grdInvoiceDetails2.SelectedRows.Count>0){//some stuff}。因为grdInvoiceDetails2.SelectedRows!=null总是返回true