簡體   English   中英

如何將CheckBoxes從GridView綁定到源DataTable?

[英]How to bind CheckBoxes from GridView to source DataTable?

我必須創建某種形式,用戶可以在其中為某些數據創建多個測試。 如果用戶要驗證數據,則必須選中適當行和列中的復選框以進行測試,然后單擊標題為“驗證測試”的按鈕。 如果用戶要添加新測試(即Test2),則必須按下“添加測試”按鈕。

所有數據都存儲在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());
        }
    }

首先,請為您的復選框分配一個ID cbx.ID = "cbxDoTest

然后添加一個RowCommand事件處理程序,該事件處理程序將在您單擊“ 驗證測試”按鈕時被觸發。 在這里,您需要遍歷e.Row.Cells屬性,如果該單元格屬於測試列,則在復選框控件中進行搜索( Checkbox cbx = e.Row.Cell[i].FindControl("cbxDoTest");然后檢查cbx.Checked是true還是false。

我從腦海中寫下了流程及其用法,因此請仔細檢查方法/屬性名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM