2013-08-28 105 views
0

我必須創建一些表單,用戶可以在其中爲某些數據創建多個測試。如果用戶想驗證數據,他必須在適當的行和列中檢查複選框以進行測試,然後單擊標題爲「驗證測試」的按鈕。如果用戶想要添加新的測試(即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()); 
     } 
    } 
+0

您是否嘗試將它們分配給一個cssclass,然後使用jquery查詢? –

回答

0

這裏是你如何去了解它,首先分配一個ID,您的複選框cbx.ID = "cbxDoTest

然後添加一個RowCommand事件處理程序,當您的驗證測試按鈕被單擊時,將觸發該事件處理程序。在這裏,你需要遍歷e.Row.Cells性質,如果小區屬於一個檢測柱,然後做CheckBox控件搜索(Checkbox cbx = e.Row.Cell[i].FindControl("cbxDoTest");然後檢查cbx.Checked是真還是假。

我寫的流量,該怎麼辦呢從我的頭上,所以請仔細檢查方法/屬性名稱。

+0

先生我有同樣的問題鏈接「http://stackoverflow.com/questions/18929061 /asp-net-gridview-rowdata-is-coming-empty-and-unchecked"...請幫我解決這個問題.. – vikas