【问题标题】:How to Visible textbox from datalist如何从数据列表中显示文本框
【发布时间】:2014-09-22 09:17:13
【问题描述】:

我想从我的数据列表中显示和隐藏我的文本框和标签。我的数据列表充满了复选框。所以,我的意思是我有很多复选框集成到数据库中。

我有 2 个主要数据。 1作为Header,1作为subHeader,每个subHeader都有很多checkbox叫做access。每个访问都有 id_access(我将它保存到 HiddenField 'id_access')并且每个 Header 都有 id_jenis(我将它保存到 HiddenField 'id_jenis_access')。如果访问(复选框文本)显示 'Others' (id_access = 'ACT5') 并且标题显示 'Others' (id_jenis = 'JO1'),则将显示带有文本框的标签 Reaseon 和 Distribtion。但我有问题。

这是我的表格

<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、lblDescription 和 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;
        }

    }

那么,我该怎么办?

仅供参考:我是这里的新手,也是 c# 程序员

【问题讨论】:

  • 不要使用Page.PreRender,而是使用DataList.ItemDataBound,只调用ShowDataList if(!Page.IsPostBack)
  • 您介意告诉我更多细节吗?因为我是新手。

标签: c# sql asp.net datalist visible


【解决方案1】:

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

添加; var value_id_access = id_access.Text;

其他价值的一些东西

【讨论】:

  • 感谢@redIntent 的回答,但您的建议不存在。所以,任何想法,任何人?
  • 并在控制语句中 if(HiddenField id_access = ..... 将 id_access 替换为 value_id_access
  • 感谢您的另一个建议,但它不起作用。任何想法,任何人?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多