2013-03-17 31 views
5

Tôi lặp lại câu hỏi này bởi vì tôi không thể tìm thấy câu trả lời từ bất cứ đâu.làm thế nào để ẩn templatefield trong GridView

Tôi có một GridView trong trang .aspx. Tôi muốn ẩn các cột dựa trên phương pháp aspx.cs BindData().

Tôi đã thử sử dụng mã bên dưới nhưng không thể ẩn. Tôi đang sử dụng Asp.net với C#.

Dưới đây là GridView có các cột và tôi cũng đã bao gồm mã nhấp chuột Button.

Nếu tôi select "T-L" mà là ở bên dưới else-if Ladder tôi đang nhận được này error

DataBinding: 'System.Data.DataRowView' không chứa một tài sản với tên 'hướng dẫn'.
Tôi đã đánh dấu một lỗi test trong .aspx

Đối tạm thời để làm cho công việc chương trình của tôi tôi đang sử dụng 4 GridView để ràng buộc 4 truy vấn, mà không phải là khả thi ... Làm thế nào tôi có thể ẩn TemplateField vô hình dựa trên điều kiện ... plz giúp tôi ..

<GridView> 
    <Columns> 
     <asp:BoundField DataField="id" HeaderText="Id" SortExpression="id" 
      Visible="false" />      
     <asp:TemplateField HeaderText="RollNo" > 
      <ItemTemplate> 
       <%# Eval("st_rollno")%> 
      </ItemTemplate> 
      <EditItemTemplate>  
       <asp:TextBox ID="tbsturollno" runat="Server" 
        Text='<%# Eval("st_rollno") %>'></asp:TextBox> 
      </EditItemTemplate> 
     </asp:TemplateField> 

     <asp:TemplateField HeaderText="Name"> 
      <ItemTemplate> 
       <%# Eval("st_name")%> 
      </ItemTemplate> 
      <EditItemTemplate>  
       <asp:TextBox ID="tbstuname" runat="Server" 
        Text='<%# Eval("st_name") %>'></asp:TextBox> 
      </EditItemTemplate>    
     </asp:TemplateField> 

     <asp:TemplateField HeaderText="Theory"> 
      <ItemTemplate> 
       <%# Eval("theory")%> 
      </ItemTemplate> 
      <EditItemTemplate> 
       <asp:TextBox ID="tbtheory" runat="Server" 
        Text='<%# Eval("theory") %>'></asp:TextBox> 
      </EditItemTemplate> 
     </asp:TemplateField> 

     <asp:TemplateField HeaderText="Total" > 
      <ItemTemplate> 
       <%# Eval("ttotal")%> 
      </ItemTemplate> 
      <EditItemTemplate> 
       <asp:TextBox ID="tbtheorytotal" runat="Server" 
        Text='<%# Eval("ttotal") %>'></asp:TextBox> 
      </EditItemTemplate> 
     </asp:TemplateField> 

     <asp:TemplateField HeaderText="Lab" > 
      <ItemTemplate> 
       <%# Eval("lab")%> 
      </ItemTemplate> 
      <EditItemTemplate> 
       <asp:TextBox ID="tblab" runat="Server" 
        Text='<%# Eval("lab") %>'> 
       </asp:TextBox> 
      </EditItemTemplate> 
     </asp:TemplateField> 

     <asp:TemplateField HeaderText="Total" > 
      <ItemTemplate> 
       <%# Eval("ltotal")%> 
      </ItemTemplate> 
      <EditItemTemplate> 
       <asp:TextBox ID="tblabtotal" runat="Server" 
        Text='<%# Eval("ltotal") %>'></asp:TextBox> 
      </EditItemTemplate> 
     </asp:TemplateField> 

     <asp:TemplateField HeaderText="Tutorial" > 
      <ItemTemplate> 
    *Error is HERE    <%# Eval("tutorial")%> 
      </ItemTemplate> 
      <EditItemTemplate> 
       <asp:TextBox ID="tbtutorial" runat="Server" 
        Text='<%# Eval("tutorial") %>'></asp:TextBox> 
      </EditItemTemplate> 
     </asp:TemplateField> 

     <asp:TemplateField HeaderText="Total" > 
      <ItemTemplate> 
       <%# Eval("tutotal")%> 
      </ItemTemplate> 
      <EditItemTemplate>  
       <asp:TextBox ID="tbtutorialtotal" runat="Server" 
        Text='<%# Eval("tutotal") %>'></asp:TextBox> 
      </EditItemTemplate> 
     </asp:TemplateField>   
    </Columns> 
</GridView> 

private void BindData() 
{ 
    DataTable dt = new DataTable(); 
    using (SqlConnection con = new SqlConnection(ConnectionString)) 
    { 
     if (stype.Equals("L")) 
     { 
      query = "SELECT [id], [st_rollno], [st_name], [lab], [ltotal] FROM [Attendence_Subject_Wise] WHERE (([branch_name] = @branch_name) AND ([scode] = @scode) AND ([sem_no] = @sem_no) AND ([sess_no] = @sess_no)) ORDER BY [st_rollno]"; 
      GridView1.Columns[3].Visible = false; 
      GridView1.Columns[4].Visible = false; 
      GridView1.Columns[7].Visible = false; 
      GridView1.Columns[8].Visible = false; 
     } 
     else if (stype.Equals("T")) 
     { 
      query = "SELECT [id], [st_rollno], [st_name], [theory], [ttotal] FROM [Attendence_Subject_Wise] WHERE (([branch_name] = @branch_name) AND ([scode] = @scode) AND ([sem_no] = @sem_no) AND ([sess_no] = @sess_no)) ORDER BY [st_rollno]"; 
      GridView1.Columns[5].Visible = false; 
      GridView1.Columns[6].Visible = false; 
      GridView1.Columns[7].Visible = false; 
      GridView1.Columns[8].Visible = false; 
     } 
     else if (stype.Equals("T-L")) 
     { 
      GridView1.Columns[7].Visible = false; 
      GridView1.Columns[8].Visible = false;  
      query = "SELECT [id], [st_rollno], [st_name], [theory], [ttotal], [lab], [ltotal] FROM [Attendence_Subject_Wise] WHERE (([branch_name] = @branch_name) AND ([scode] = @scode) AND ([sem_no] = @sem_no) AND ([sess_no] = @sess_no)) ORDER BY [st_rollno]"; 
     } 
     else 
     {  
      query = "SELECT [id], [st_rollno], [st_name],[theory], [ttotal], [lab], [ltotal], [tutorial], [tutotal] FROM [Attendence_Subject_Wise] WHERE (([branch_name] = @branch_name) AND ([scode] = @scode) AND ([sem_no] = @sem_no) AND ([sess_no] = @sess_no)) ORDER BY [st_rollno]"; 
     } 

     com = new SqlCommand(query); 
     com.Parameters.Add("@branch_name", dept); 
     com.Parameters.Add("@scode", dpsubject.SelectedItem.Text.ToString()); 
     com.Parameters.Add("@sem_no", Int32.Parse(dpsemno.SelectedItem.Text.ToString())); 
     com.Parameters.Add("@sess_no",Int32.Parse(dpsessional.SelectedItem.Text.ToString())); 

     using (SqlDataAdapter sda = new SqlDataAdapter()) 
     { 
      com.Connection = con; 
      con.Open(); 
      sda.SelectCommand = com; 
      sda.Fill(dt); 
      GridView1.DataSource = dt; 
      GridView1.DataBind(); 
      con.Close(); 
     }  
    } 
} 

protected void bsubmit_Click(object sender, EventArgs e) 
{ 
    this.BindData(); 
} 

Trả lời

9

Cố gắng có truy vấn của bạn vẫn trả lại kết quả cho mỗi cột bạn muốn ẩn mặc dù bạn sẽ không sử dụng những giá trị đó. Trong truy vấn cho khi stype là "TL", thay đổi query từ này:

query = "SELECT [id], [st_rollno], [st_name], [theory], [ttotal], [lab], [ltotal] FROM [Attendence_Subject_Wise] WHERE (([branch_name] = @branch_name) AND ([scode] = @scode) AND ([sem_no] = @sem_no) AND ([sess_no] = @sess_no)) ORDER BY [st_rollno]"; 

Để này:

query = "SELECT [id], [st_rollno], [st_name], [theory], [ttotal], [lab], [ltotal], '' as tutorial, '' as tutotal FROM [Attendence_Subject_Wise] WHERE (([branch_name] = @branch_name) AND ([scode] = @scode) AND ([sem_no] = @sem_no) AND ([sess_no] = @sess_no)) ORDER BY [st_rollno]"; 

EDIT:

Để ẩn cột, thêm các phương pháp sau đây vào mã của bạn phía sau:

protected void GridView_DataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (stype.Equals("T-L")) 
    { 
     MyGridView.Columns[7].Visible = false; 
     MyGridView.Columns[8].Visible = false; 
    } 
} 

Và đăng ký sự kiện DataBound trên GridView. Lưu ý rằng tôi đã thêm một ID vào GridView để tôi có thể tham khảo nó từ mã phía sau.

<GridView ID="MyGridView" OnDataBound="GridView_DataBound"> 
+0

Jacob VanScoy hoạt động nhưng không thể ẩn cột .. – user2053138

+0

Jacob VanScoy Cảm ơn bạn đang làm việc trên Air ...! – user2053138

+0

FYI, kiểu dữ liệu của tham số thứ hai cho "DataBound" của GridView không phải là GridViewRowEventArgs, nó chỉ là EventArgs. Vì bạn không sử dụng tham số trong phương thức của mình ("e") nên nó không quan trọng đối với ví dụ, ngoại trừ việc nó sẽ không biên dịch. http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.basedataboundcontrol.databound(v=vs.110).aspx –

Các vấn đề liên quan