2013-06-03 45 views
0

我有一個GridView它擁有用戶數據。當調用Page_Load方法時,我使用DataTable獲取數據,然後將其綁定到GridView。在每行的末尾,我添加了一個CheckBox。該CB用作用戶想要編輯的實體的指針。Checked_Change GridView內部編程生成的複選框行

我的問題是Check_Changed CheckBoxes事件。如果控件是以編程方式生成的,我不知道如何添加處理程序。我也需要行的索引(字段值也是可能的,但列標題和列本身是隱藏的)。

foreach (GridViewRow gvr in grdMitgliedsliste.Rows) 
{ 
     //add checkbox for every row 
     TableCell cell = new TableCell(); 
     CheckBox box = new CheckBox(); 
     cell.Controls.Add(box); 
     gvr.Cells.Add(cell); 

     //Hide columns for userid, status, etc. 
     gvr.Cells[0].Visible = false; 
     gvr.Cells[3].Visible = false; 
     gvr.Cells[4].Visible = false; 
     gvr.Cells[5].Visible = false; 
     gvr.Cells[8].Visible = false; 
     gvr.Cells[9].Visible = false; 
} 

我已經嘗試實現從這裏處理程序,但它給了我沒有索引參數,所以程序不能確定在哪個行的複選框進行了調查。

回答

1
protected void Page_Load(object sender, EventArgs e) 
     { 
      List<string> names = new List<string>(); 
      names.Add("Jhonatas"); 

      this.GridView1.DataSource = names; 
      this.GridView1.DataBind(); 

      foreach (GridViewRow gvr in GridView1.Rows) 
      { 
       //add checkbox for every row 
       TableCell cell = new TableCell(); 
       CheckBox box = new CheckBox(); 
       box.AutoPostBack = true; 
       box.ID = gvr.Cells[0].Text; 

       box.CheckedChanged += new EventHandler(box_CheckedChanged); 
       cell.Controls.Add(box); 
       gvr.Cells.Add(cell); 
      } 
     } 

     void box_CheckedChanged(object sender, EventArgs e) 
     { 
      string test = "ok"; 
     } 
+0

如何檢查此行的索引?我需要得到這個能夠確定哪個複選框被檢查,哪些不是... – LeonidasFett

+0

您的活動正在被解僱? –

+0

nope它沒有被解僱...... – LeonidasFett

1
TableCell cell = new TableCell(); 
    CheckBox box = new CheckBox(); 
    box.Check += new EventHandler(Checked_Changed); 
    cell.Controls.Add(box); 
    gvr.Cells.Add(cell); 

對不起,我即將開車回家,所以它只是一個快速的答案。 mabye你有框後糾正事件「事件」 ......

+0

我已經試過這個,但是我沒有得到CheckBox所在行的索引。我有多行,每一行都有一個複選框。如果有人被檢查,其他人應該沒有檢查。 – LeonidasFett

1

你應該走這條路。

首先,當你正在生成的複選框

 CheckBox box = new CheckBox(); 
     box.AutoPostBack=true; 

向複選框提供一個標識爲

 box.ID=Convert.toString(Session["Count"]); 

當初始化「計數」時在會話中加載e頁面。每次添加新複選框時, 也會增加「計數」。

其次,定義事件處理程序的動態複選框這樣的:

 box.CheckedChange += MyHandler; 

,並定義MyHandler的

 protected void MyHandler(object sender, EventArgs e) 
     { 
      //Do some stuff 
     } 

現在你可能會從該事件具有複選框的ID在MyHandler內部被解僱,這實際上是行號。

  CheckBox cb = (CheckBox)sender; 
      string id = cb.ID; 
+0

好吧,當我這樣做,事件正在被解僱,但我總是得到相同的ID「ctl00」... – LeonidasFett

+0

請看看我編輯的答案。 –

+0

感謝一點點修改我設法讓它工作。我剛剛添加了一個隱藏字段,其中包含數據集的ID。那麼我只是用它來指代複選框。 – LeonidasFett