2017-08-28 9 views
1

私のページでは、私はGridViewをコードビハインドからソースに設定して、XMLファイルからコンパイルするカスタムDatatableを設定します。このようにして、 。 そして、これは正常に動作しますので、このように列を追加しながら、私は細胞内のチェックボックスを追加してい:チェックボックスのデータテーブルからチェックイベントを処理していない

:私はこのように電子として GridViewRowEventArgsと私のGridViewのRowDataBoundで各チェックボックスを有効にしています

  DataTable dt = new DataTable(); 
     dt.Columns.Add(" "); 
     foreach (XmlNode xns in doc.DocumentElement.ChildNodes[0]) 
     { 
      foreach (XmlNode xn in xns) 
      { 
       string tagName = xn.Name; 

       dt.Rows.Add(tagName); 
      } 

     } 

     dt.Columns.Add("Mattina Turno 1", typeof(bool)); //this adds the checkbox 
     dt.Columns.Add("Mattina Turno 2", typeof(bool)); 
     dt.Columns.Add("Pomeriggio", typeof(bool)); 

     GridView1.DataSource = dt; 
     GridView1.DataBind(); 

protected void GridView1_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e) 
    { 

      for (int i = 0; i < e.Row.Cells.Count;i++) 
      { 
       if (e.Row.Cells[i].GetType() == typeof(System.Web.UI.WebControls.DataControlFieldCell)) 
       { 
        TableCell tc = e.Row.Cells[i]; 
        if (tc.Controls.Count > 0) 
        { 
         CheckBox cb = (CheckBox)tc.Controls[0]; 
         if (cb != null) 
         { 
          cb.Enabled = true; 
          colonna = ((GridView)sender).HeaderRow.Cells[i].Text; 
          riga = e.Row.Cells[0].Text; 
          cb.CausesValidation = false; 
          cb.ID = riga + " " + colonna; 
          cb.ToolTip = riga + " " + colonna; 
          cb.AutoPostBack = true; 
          cb.CheckedChanged += new EventHandler(Cb_CheckedChanged); 
          cb.Attributes.Add("runat", "server"); 
         } 
        } 
       } 
      } 

    } 

しかし、チェックボックスのチェックイベントを処理しようとすると何も起こりません。 チェックチェンジはCb_CheckedChangedを呼び出す必要がありますが、何も起こりません。これはCb_CheckChangedさ

 private void Cb_CheckedChanged(object sender, EventArgs e) 
    { 
     Cliccato.Text = ((CheckBox)sender).ID.ToString(); 
     System.Diagnostics.Debug.Write(((CheckBox)sender).ToolTip); 
    } 

私は、チェックボックスにページの更新をクリックしたときので、AutoPostBackのは動作するようですが、それはすべてのイベントを処理しません... は私を助けてください、私は本当にあなたの助けが必要!

+0

可能な重複の[チェックボックスのDataGridViewにCellValueChangedイベントを発火ありません] (同じhttps://stackoverflow.com/questions/17275166/checkboxes-in-datagridview-not-firing-cellvaluechanged-event) – MatSnow

+0

同じ質問かもしれませんが、あなたは正しい答えを見つけましたか?それは'13の質問です、私はそれが同じではないことを確認することができます。重複していると印を付けないでください。 –

答えて

0

のように動的にGridViewコントロールにチェックボックスを追加

if (e.Row.RowType == DataControlRowType.Row) 
{ 
    // assuming there is label in first cell, you cast it that you want 
    string cellText = (e.Row.Cells[0].FindControls("Label1") as Label).Text; 
} 
0

コードでrunatサーバープロパティを設定していないため、チェックボックスをオンまたはオフにしても何も起こりません。あなたはまた、もしブロック内でブレークポイントを配置し、コードがコントロールの初期化の部分に入っているかどうかを確認する必要があり

cb.Attributes.Add("runat", "server"); 

たぶん、あなたはこのような何かを試すことができます。 RowDataBoundにコードの下の各行の使用のセルからテキストを取得するための

protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e) 
{ 
    // check if it's not a header and footer 
    if (e.Row.RowType == DataControlRowType.Row) 
    { 
     CheckBox chk = new CheckBox(); 

     chk.AutoPostBack = true; 

     // add checked changed event to checkboxes 
     chk.CheckedChanged += new EventHandler(chk_CheckedChanged); 

     e.Row.Cells[1].Controls.Add(chk); // add checkbox to second column 
    } 
} 

関連する問題