我正在設計一個包含2個選項卡的TabControl的窗體窗體。我在每個選項卡中都有一個DataGridView,並且它們都填充了相同的列(包括DataGridViewCheckBoxColumn),但參數不同,因此最終用戶可以更輕鬆地使用它們,而不是全部包含在1個網格中。我可以在一個表單中使用多個DataGridViewRows嗎?
我想我可以爲每個DatagridView設置一個DataGridViewRow,並且它會在調用時將它們用作新實例,但似乎並非如此。
以下代碼在用戶選中或取消選中第一個選項卡的DataGridView中的複選框時正常工作;
private void dgvChq_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
int column = e.ColumnIndex;
int row = e.RowIndex;
if (column == 5)
{
DataGridViewCheckBoxCell c = dgvChq[e.ColumnIndex, e.RowIndex] as DataGridViewCheckBoxCell;
if (c != null)
{
string a = e.FormattedValue.ToString();
if (a == "True")
{
using (SqlCommand cmd = con.CreateCommand())
{
cmd.CommandText = "UPDATE Customer.OrderHeader SET DateApproved = @approved WHERE OrderNumber = @ordNo";
cmd.Parameters.AddWithValue("@approved", DateTime.Today);
cmd.Parameters.AddWithValue("@ordNo",dgvChq.Rows[row].Cells[0].Value.ToString());
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
DataGridViewRow dr = dgvChq.SelectedRows[0];
dr.Cells[4].Value = DateTime.Today.ToString();
}
else
{
using (SqlCommand cmd = con.CreateCommand())
{
cmd.CommandText = "UPDATE Customer.OrderHeader SET DateApproved = NULL WHERE OrderNumber = @ordNo";
cmd.Parameters.AddWithValue("@ordNo", dgvChq.Rows[row].Cells[0].Value.ToString());
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
DataGridViewRow dr = dgvChq.SelectedRows[0];
dr.Cells[4].Value = "";
}
}
}
}
所以我想我可以使用不同的DataGridViewRow和重新使用此代碼在其他標籤中的其他的DataGridView,但它失敗;
private void dgvCredit_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
int column = e.ColumnIndex;
int row = e.RowIndex;
if (column == 0)
{
DataGridViewCheckBoxCell c = dgvCredit[e.ColumnIndex, e.RowIndex] as DataGridViewCheckBoxCell;
if (c != null)
{
string a = e.FormattedValue.ToString();
if (a == "True")
{
using (SqlCommand cmd = con.CreateCommand())
{
cmd.CommandText = "UPDATE Customer.OrderHeader SET DateApproved = @approved WHERE OrderNumber = @ordNo";
cmd.Parameters.AddWithValue("@approved", DateTime.Today);
cmd.Parameters.AddWithValue("@ordNo", dgvCredit.Rows[row].Cells[1].Value.ToString());
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
DataGridViewRow dgvr = dgvCredit.SelectedRows[0];
dgvr.Cells[4].Value = DateTime.Today.ToString();
}
else
{
using (SqlCommand cmd = con.CreateCommand())
{
cmd.CommandText = "UPDATE Customer.OrderHeader SET DateApproved = NULL WHERE OrderNumber = @ordNo";
cmd.Parameters.AddWithValue("@ordNo", dgvCredit.Rows[row].Cells[1].Value.ToString());
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
DataGridViewRow dgvr = dgvCredit.SelectedRows[0];
dgvr.Cells[4].Value = "";
}
}
}
}
我錯過了這裏的東西,還是不可能在同一個表單中使用多個DataGridViewRows?
也許還有一種更「動態」的方式,我也可以這樣做,這可能有助於解決我的問題?
PS:它似乎是第二個datagridviewrow(dgvr)在單擊複選框時仍然顯示爲空,所以這是錯誤發生的位置。
如果您複製並粘貼了數據網格,是否有機會讓它們具有相同的事件處理程序? – 2012-07-27 08:57:41
你的代碼哭了一些重構和分離的業務邏輯:(:( – nawfal 2012-07-27 08:59:17
而不是使用兩個數據網格,它是一個選項來簡單地過濾一個基於文本框的文本? – 2012-07-27 09:00:19