2012-05-08 4 views
0

나는 그 구성 요소의 대부분을 즉석에서 생성하기위한 C# aspx 웹 응용 프로그램을 가지고 있습니다. 이 GridView는 일부 확인란을 표시하기위한 것입니다.gridview의 동적 체크 상자

wierd는 실행 중에는 구성 요소를 표시하지 않지만 네임 스페이스는 표시합니다 (예 : System.UI.Webcontrols.CheckBox).

확인란을 선택해야합니다. 이 문제를 어떻게 해결할 수 있습니까?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:GridView ID="GridView1" runat="server" OnRowDataBound="GridView1_RowDataBound" /> 
    </div> 
    </form> 
</body> 
</html> 

[aspx.cs] 

namespace ChkBoxOnGridView 
{ 
    public partial class WebForm1 : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      PopulateGridView(); 
     } 
     protected void GridView1_RowDataBound(Object sender, GridViewRowEventArgs e) 
     { 
      if (e.Row.RowType == DataControlRowType.DataRow) 
      { 
       CheckBox cb = new CheckBox(); 
       e.Row.Cells[1].Controls.Add(cb); 
      } 
     } 

     private void PopulateGridView() 
     { 
      GridView1.DataSource = null; 
      GridView1.Columns.Clear(); 

      DataTable dt = new DataTable(); 

      dt.Columns.Add(new DataColumn("DTA", typeof(System.String))); 
      dt.Columns.Add(new DataColumn("Is Visible", typeof(System.Web.UI.WebControls.CheckBox))); 

      CheckBox chkbx = new CheckBox(); 
      chkbx.Checked = true; 

      DataRow row1 = dt.NewRow(); 
      row1["DTA"] = "Some Text"; 
      row1["Is Visible"] = chkbx; 
      dt.Rows.Add(row1); 

      foreach (DataColumn col in dt.Columns) 
      { 
       BoundField bField = new BoundField(); 
       bField.DataField = col.ColumnName; 
       bField.HeaderText = col.ColumnName; 
       GridView1.Columns.Add(bField); 
      } 

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

답변

2

당신은 GridView.RowdataBound event를 사용하여 각 행에서 개별적으로 각 개체를 만들어야합니다.

, 당신은 헤더하지 않은 당신이 행에이 이벤트에 확인해야 당신은 당신이 바로 그 장소에 만들 있는지 얻으려면, e.Row.Cells[]

를 사용하여 추가 할 수 있지만, 나 바닥 글 또는 호출기. 이

void CustomersGridView_RowDataBound(Object sender, GridViewRowEventArgs e) 
{ 

    if(e.Row.RowType == DataControlRowType.DataRow) 
    { 
    CheckBox cb = new CheckBox(); 
    // cb.id = ... and other control setup 
    // add your control here: 
    e.Row.Cells[0].Controls.Add(cb); 
    } 
} 
+0

당신이 나에게 내 코드를 기반으로 작동하는 모델을 보여 주 시겠어요, C#을 아주 새로운 오전. – antowizzy

+0

내가 당신에게 보여줄 것이 무엇이든 어렵지 않습니다. 그러나 CustomerGridView에 DataBind를 사용하고 RowDataBound 이벤트를 표시된 코드로 처리하면됩니다. e.Row.DataItem을 모델 클래스에 캐스팅하는 각 행에 연결된 데이터에 액세스 할 수 있으므로 해당 속성에 쉽게 액세스하여 컨트롤을 추가하는 방법을 쉽게 결정할 수 있습니다. – JotaBe

+0

어떻게하면 chkbx의 검사 상태를 확인하고 첫 번째 열의 반복 인 세 번째 열을 제거 할 수 있습니까? 코드를 업데이트했습니다. – antowizzy

1

DataRow 난 당신이 DataTable에있는 컨트롤을 보유 할 수없는 말을 한 걸음에 외출 있다면 당신은 e.Row의 GridViewRow.RowType Property을 확인하여이 작업을 수행하고 확인. [보이지 않음]은 부울 값이어야합니다.

템플릿 열을 사용하여 On Init 이벤트에 열을 추가합니다. 이 SO 질문을 참조 : Adding dynamic columns to an ASP.NET Gridview