2013-03-17 16 views
5

Powtarzam to pytanie, ponieważ nie mogę znaleźć odpowiedzi z dowolnego miejsca.sposób ukrywania szablonu w widoku siatki

Mam stronę GridView na stronie .aspx. Chcę ukryć kolumny oparte na metodzie aspx.cs BindData().

Próbowałem użyć poniższego kodu, ale nie mogłem się ukryć. Używam Asp.net z C#.

Poniżej znajduje się mój GridView z kolumnami i dodałem również kod kliknięcia Button.

Gdybym select "T-L" który jest poniżej else-if Ladder otrzymuję ten error

DataBinding: „System.Data.DataRowView” nie zawiera właściwość o nazwie „poradnik”.
mam zaznaczone błąd przypadków testowych w .aspx

do czasowego, aby mój program działa Używam 4 GridView związać 4 zapytania, co nie jest możliwe ... W jaki sposób można ukryć TemplateField niewidoczny na podstawie warunków ... plz mi pomóc ..

<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(); 
} 

Odpowiedz

9

Spróbuj konieczności zapytanie wciąż zwracają wynik dla każdej kolumny, którą chcesz ukryć, nawet jeśli nie użyje tych wartości. W zapytaniu do kiedy stype jest "TL", zmień query z tego:

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]"; 

do tego:

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:

Aby ukryć kolumnę, dodaj następującą metodę do Twojego kodu za:

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

I zasubskrybuj zdarzenie DataBound w GridView. Zauważ, że dodałem identyfikator do GridView, dzięki czemu mogę odwołać się do niego z kodu z tyłu.

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

Jacob Vanscoy to działa, ale nie jest w stanie ukryć kolumnę .. – user2053138

+0

Jacob Vanscoy Thanks to działa on Air ...! – user2053138

+0

FYI, typ danych drugiego parametru dla "DataBound" GridView nie jest GridViewRowEventArgs, to tylko EventArgs. Ponieważ nie używasz parametru w swojej metodzie ("e"), jest to nieistotne dla przykładu, z tym wyjątkiem, że nie będzie się kompilować. http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.basedataboundcontrol.databound(v=vs.110).aspx –

Powiązane problemy