2013-03-17 6 views
5

में टेम्पलेटफ़ील्ड को कैसे छिपाना है मैं इस प्रश्न को दोहरा रहा हूं क्योंकि मुझे कहीं से भी जवाब नहीं मिल रहा है।ग्रिडव्यू

मेरे पास .aspx पृष्ठ में GridView है। मैं aspx.cs BindData() विधि के आधार पर कॉलम छिपाना चाहता हूं।

मैंने नीचे कोड का उपयोग करने की कोशिश की है लेकिन छिपाने में सक्षम नहीं है। मैं सी # के साथ Asp.net का उपयोग कर रहा हूँ।

नीचे मेरे GridView कॉलम के साथ है और मैंने Button क्लिक कोड भी शामिल किया है।

मैं select "T-L" जो else-if Ladder नीचे में है मैं इस error

DataBinding हो रही हैं: 'System.Data.DataRowView' नाम 'ट्यूटोरियल' के साथ एक संपत्ति शामिल नहीं है।
मैं .aspx

अस्थायी के लिए में एक टेस्ट केस त्रुटि मेरा कार्यक्रम काम मैं 4 gridview उपयोग कर रहा हूँ 4 क्वेरी, जो संभव नहीं है बाध्य करने के लिए बनाने के लिए चिह्नित किया है ... कैसे मैं परिस्थितियों के आधार पर अदृश्य TemplateField छिपा कर सकते हैं ... plz मेरी मदद ..

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

उत्तर

9

आपकी क्वेरी अभी भी प्रत्येक स्तंभ आप को छिपाने के लिए भले ही आप उन मूल्यों का उपयोग नहीं होगा चाहते हैं के लिए एक परिणाम वापसी होने की कोशिश करें। जब stype "एल" है के लिए क्वेरी में, इस से query बदलने के लिए:

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

इस के लिए:

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

संपादित:

स्तंभ छिपाने के लिए, निम्न विधि जोड़ने आपके कोड के पीछे:

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

और ग्रिड व्यू पर डेटाबाउंड ईवेंट की सदस्यता लें। ध्यान दें कि मैंने ग्रिड व्यू में एक आईडी जोड़ा है, इसलिए मैं इसे पीछे कोड से संदर्भित कर सकता हूं।

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

याकूब Vanscoy यह लेकिन स्तंभ को छिपाने के लिए सक्षम नहीं काम करता है .. – user2053138

+0

याकूब Vanscoy धन्यवाद यह एयर पर काम कर रहा है ...! – user2053138

+0

FYI, ग्रिड व्यू के "डेटाबाउंड" के लिए दूसरे पैरामीटर का डेटा प्रकार ग्रिडव्यूरोवेंवेंट आर्ट्स नहीं है, यह केवल EventArgs है। चूंकि आप अपनी विधि ("ई") के पैरामीटर का उपयोग नहीं कर रहे हैं, उदाहरण के लिए यह अपरिहार्य है, सिवाय इसके कि यह संकलित नहीं होगा। http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.basedataboundcontrol.databound(v=vs.110).aspx –