我必須創建一些表單,用戶可以在其中爲某些數據創建多個測試。如果用戶想驗證數據,他必須在適當的行和列中檢查複選框以進行測試,然後單擊標題爲「驗證測試」的按鈕。如果用戶想要添加新的測試(即Test2),他必須按下「添加測試」按鈕。如何將CheckBox從GridView綁定到源數據表?
所有數據都存儲在DataTable(dtTests)中,並通過GridView(dgvTests)在aspx頁面上顯示。
我的問題是,我怎麼能檢查每個複選框的值?
示例網站: 在示例,用戶添加兩個測試(看圖像:http://i.stack.imgur.com/cR8l5.jpg)。
- 在Test1的,他想驗證年:1990年,1993年,1999年
- 在Test2的,他想驗證年:1990年,1993年,1998年,1999年在
新試驗塔dtTests:
DataColumn dc = new DataColumn("Test" + i.ToString())
{
DataType = typeof(Boolean),
ReadOnly = false
};
dtTests.Column.Add(dc);
我以這種方式添加新TestX列的GridView:
TemplateField cbxTest = new TemplateField();
cbxTest.HeaderTemplate = new CheckBoxTemplate(DataControlRowType.Header, "Test" + i.ToString(), "Test" + i.ToString());
cbxTest.ItemTemplate = new CheckBoxTemplate(DataControlRowType.DataRow, "Test" + i.ToString(), "Test" + i.ToString());
dgvTests.Columns.Add(cbxTest);
這裏的類CheckBoxTemplate:
public class CheckBoxTemplate : ITemplate
{
private DataControlRowType templateType;
private string columnName;
private string bindName;
public CheckBoxTemplate(DataControlRowType _type, string _colName, string _bindName)
{
templateType = _type;
columnName = _colName;
bindName = _bindName;
}
public void InstantiateIn(Control container)
{
switch (templateType)
{
case DataControlRowType.Header:
Literal lc = new Literal() { Text = String.Format("<b>{0}</b>", columnName) };
container.Controls.Add(lc);
break;
case DataControlRowType.DataRow:
CheckBox cbx = new CheckBox();
cbx.DataBinding += new EventHandler(this.cbx_DataBinding);
container.Controls.Add(cbx);
break;
default:
break;
}
}
private void cbx_DataBinding(Object sender, EventArgs e)
{
CheckBox cbx = (CheckBox)sender;
GridViewRow row = (GridViewRow)cbx.NamingContainer;
cbx.Checked = Convert.ToBoolean(DataBinder.Eval(row.DataItem, bindName).ToString());
}
}
您是否嘗試將它們分配給一個cssclass,然後使用jquery查詢? –