1. 程式人生 > >DataGrid中新增CheckBox

DataGrid中新增CheckBox

在DataGrid中要實現確認功能

最初的設想是:在每行前面加一個CheckBox,以實現當點選CheckBox時,立即觸發事件(如:on click="Chk_Click()"),獲取當前行的id和CheckBox的checked屬性值,最後更新資料庫。

在解決問題之前,我搜過很多相關文件,大部分是如何實現全選,而且還是通過一個按鈕來觸發事件的,明顯不符合自己的要求,但還是提供了一些資訊。

事實上遇到幾個問題:
Chk_Click()的輸入引數型別是object和System.EventArgs,如何獲取當前行的id和checked屬性值

自己水平差,輸入引數貌似都沒什麼作用,我利用迴圈foreach (DataGridItem di in this.DataGrid1.Items)判斷到底點選哪一行的CheckBox,如果是已經確認的行,在繫結資料的時候把CheckBox的Enable屬性設為False,這樣當遇到第一個Enable為True,Checked為True的行即為點選的行,然後退出迴圈,這樣效率會不會高點?但是又想到,萬一使用者誤點錯行,Enable就變成False,無法修改過來,所以不能設定Enable屬性!最後,我使用CheckBox的Checked屬性和flag欄位合在一起判斷,如果Checked為True,flag為0說明是點選確認的行,如果Checked為False,flag為1說明是點選取消確認的行。

foreach (DataGridItem di in this.DataGrid1.Items)
{
if ( ((CheckBox)di.FindControl("chk")).Checked == true && ((Label)di.FindControl("flag")).Text == "0" )
{
strsql = "update table1 set flag = 1 where id = " + di.Cells[1].Text;
break;
}

if ( ((CheckBox)di.FindControl("chk")).Checked == false && ((Label)di.FindControl("flag")).Text == "1" )
{
strsql = "update table1 set flag = 0 where id = " + di.Cells[1].Text;
break;
}
}