2014-09-22 61 views
1

我想从我的数据列表中看到和看不到我的文本框和标签。我的数据专员用复选框完成。所以,我的意思是我有很多整合到数据库的复选框。如何从数据列表中显示文本框

我有2个主要数据。 1作为标题,1作为子标题,每个子标题都有许多复选框,称为访问。每个访问都有id_access(我将它保存到HiddenField'id_access'中),每个Header都有id_jenis(我将它保存到HiddenField'id_jenis_access'中)。如果访问(复选框文本)显示'其他'(id_access ='ACT5')并且标题显示'其他'(id_jenis ='JO1'),则标签Reaseon和Discribtion及其文本框将显示。但我有问题。

这是我的形式

<asp:DataList ID="DataListTest" runat="server" OnPreRender="PreTes"> 
     <ItemTemplate> 
    <table cellpadding="0" cellspacing="0"> 
     <tr> 
     <td> 
     <asp:Label ID="lblHeader" runat="server"></asp:Label> <!-- Telephone, Bussines System -->          
     </td> 

     </tr> 
     <tr> 
     <td> 
     <asp:Label ID="lblsubheader" runat="server" /></td> <!-- Oracle, EPM, CRM (Muncul di Form) --> 
     </tr> 

     <tr> 
     <td> 
     <asp:HiddenField ID="id_jenis_access" runat="server" Value='<%Eval(idJenisAccess) %>' /> <!-- Output = JT1, JO1, JBS1 (ID_JENIS) --> 
     <asp:HiddenField ID="subhd" runat="server" Value='<%# Eval("sub_jenis") %>' /> <!-- Oracle, EPM, CRM (nama sub jenis) --> 
     <asp:HiddenField ID="id_access" runat="server" Value='<%# Eval("id_access") %>' /><!-- Output = ACT5, ACBS1 --> 
     <asp:HiddenField ID="hd" runat="server" Value='<%# Eval("nama_jenis") %>' /><!-- Output = Telephone, Bussines System --> 
     </td> 
     </tr> 

     <tr> 
     <td> 
     <asp:CheckBox ID="cbCountryName" runat="server" Text='<%# Eval("nama_access") %>' /> <!-- Output = Local, Handphone, Project --> 
     <asp:TextBox ID="testme" runat="server" Text="" Visible="false" /> <!-- Output = Textbox for all -->    
     </td> 
     </tr> 

     <tr> 
     <td><asp:Label ID="lblReason" runat="server" Visible="false" text="Reason : "/> 
     <asp:TextBox ID="txtReason" Text="Reason" runat="server" Visible="false" />  
     </td>     
     </tr> 

     <tr> 
     <td> 
     <asp:Label ID="lblDescription" runat="server" Visible="false" text="Description : "/> 
     <asp:TextBox ID="txtDescription" runat="server" Text="" Visible="false" /> 
     </td> 
     </tr> 
    </table> 
     </ItemTemplate> 
    </asp:DataList> 

这是我的代码从数据库中调用我的所有数据

private void ShowDataList() 
{ 
    conn.Open(); 
    string sql = "Select access.id_access as 'id_access', access.nama_access, jenis_access.id_jenis_access as 'idJenisAccess' , "+ 
       "jenis_access.nama_jenis_access as 'nama_jenis', sub_jenis.nama_sub_jenis as 'sub_jenis',sub_jenis.id_sub_jenis "+ 
       "FROM access LEFT JOIN detil_access ON access.id_access = detil_access.id_access "+ 
       "LEFT JOIN jenis_access ON detil_access.id_jenis_access = jenis_access.id_jenis_access "+ 
       "LEFT JOIN sub_jenis ON detil_access.id_sub_jenis = sub_jenis.id_sub_jenis "+ 
       "ORDER BY jenis_access.id_jenis_access"; 
    SqlCommand cmd = new SqlCommand(sql, conn); 
    SqlDataAdapter adp = new SqlDataAdapter(cmd); 
    dt = new DataTable(); 
    adp.Fill(dt); 
    DataListTest.DataSource = dt; 
    DataListTest.DataBind(); 
} 

我的问题是我的lblReason,txtReason,lblDescribtion和txtDescription是不能显示。 这是我在PreRender datalist上的代码,我称之为PreTes。

protected void PreTes(object sender, EventArgs e) 
{ 
    string temp = ""; 
    string subtemp =""; 
    foreach (DataListItem item in DataListTest.Items) 
    { 
     Label objLabel = (Label)item.FindControl("lblHeader"); 
     Label subjenis = (Label)item.FindControl("lblsubheader"); 
     TextBox t = (TextBox)item.FindControl("testme"); 
     CheckBox objName = (CheckBox)item.FindControl("cbCountryName"); // Internet, User Folder, etc (the Access) 
     HiddenField objHD = (HiddenField)item.FindControl("hd"); // Telephone, Busines System 
     HiddenField subobjHD = (HiddenField)item.FindControl("subhd"); // Oracle, CRM , EPM 
     HiddenField id_access = (HiddenField)item.FindControl("id_access"); // ACT5, ACBS1, etc (code Access) 
     HiddenField id_jenis = (HiddenField)item.FindControl("hdIdJenisAccess"); // JTO1, JBS1, etc (code Jenis)    
     TextBox tr = (TextBox)item.FindControl("txtReason"); 
     TextBox td = (TextBox)item.FindControl("txtDescription"); 
     Label lblReason = (Label)item.FindControl("lblReason"); 
     Label lblDescription = (Label)item.FindControl("lblDescription"); 

     if (temp != objHD.Value) 
     { 
      temp = objHD.Value; 
      objLabel.Text = temp + "<br/>"; 
     } 
     if (subtemp != subobjHD.Value) 
     { 
      subtemp = subobjHD.Value; 
      subjenis.Text = subtemp + "<br/>"; 
     } 

     if (id_access.Value == "ACT5" && id_jenis.Value == "JO1") 
     { 
      lblDescription.Visible = true; 
      td.Visible = true; 
      lblReason.Visible = true; 
      tr.Visible = true; 
     } 

    } 

那么,我该怎么办?

FYI:我是一个新手,也C#程序员

+1

不要使用'Page.PreRender'但['DataList.ItemDataBound'](http://msdn.microsoft.com/en-us/library/system.web .ui.webcontrols.datalist.itemdatabound(v = vs.110).aspx),只调用'ShowDataList' if(!Page.IsPostBack)'。 – 2014-09-22 09:25:23

+0

你介意告诉我更多细节吗?因为我是一个新手。 – 2014-09-22 10:03:18

回答

0

后:HiddenField id_access = (HiddenField)item.FindControl("id_access");

插件; var value_id_access = id_access.Text;

一些事情的其他值

+0

不确定该方法是否存在 – Rhumborl 2014-09-22 09:27:06

+0

thankyou @redIntent为答案,但您的建议不存在。那么,任何想法,任何人? – 2014-09-22 09:30:42

+0

我编辑我的帖子 – redIntent 2014-09-22 09:50:53

相关问题