首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问datalist中的HiddenField

访问datalist中的HiddenField
EN

Stack Overflow用户
提问于 2013-02-15 19:44:46
回答 2查看 1.8K关注 0票数 0

我使用一个Datalist来显示国家列表,每个记录都有一个包含州列表的Gridview,每个州都有一个城市下拉列表。我使用一个隐藏字段来获取国家的ID,通过在隐藏字段中使用Eval("C_ID")来检索每个记录的州名称。但它提高了ArgumentOutOfRangeException。我不知道我做错了什么。下面是Datalist的代码:

代码语言:javascript
复制
<asp:DataList ID="DataList1" runat="server" RepeatColumns="4" RepeatDirection="Horizontal" onitemdatabound="DataList1_ItemDataBound" >
        <ItemTemplate>
        <table border="1px">
            <tr>
                <td>
                    <%#Eval("C_Name") %><br />
                    <asp:HiddenField ID="HiddenField1" Value='<%#Eval("C_ID") %>' runat="server" />
                    <asp:GridView ID="GridView1" AutoGenerateColumns="false" runat="server">
                        <Columns>
                            <asp:TemplateField HeaderText="State   Cities">
                                <ItemTemplate >
                                    <asp:CheckBox ID="CheckBox1" runat="server" />
                                    <%#Eval("S_Name") %>
                                    <asp:DropDownList ID="DropDownList1" runat="server">
                                    </asp:DropDownList>
                                </ItemTemplate>
                            </asp:TemplateField>
                        </Columns>
                    </asp:GridView>
                </td>
            </tr>
           </table>
        </ItemTemplate>
    </asp:DataList>

这是代码背后的代码:

代码语言:javascript
复制
public partial class AdvancedTable : System.Web.UI.Page
{
    SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ConStr"].ConnectionString);
    DataSet ds = new DataSet();
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            SqlDataAdapter da = new SqlDataAdapter();
            da.SelectCommand = new SqlCommand("select * from Country", con);
            con.Open();
            da.Fill(ds, "Country");
            con.Close();
            DataList1.DataSource = ds;
            DataList1.DataBind();
        }
    }

    protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
    {
        SqlDataAdapter da2 = new SqlDataAdapter();
        da2.SelectCommand = new SqlCommand("select * from State where C_ID='"+((HiddenField)DataList1.Items[e.Item.ItemIndex].FindControl("HiddenField1")).Value+"'",con);
        con.Open();
        da2.Fill(ds, "State");
        con.Close();
        ((GridView)e.Item.FindControl("GridView1")).DataSource = ds.Tables["State"];
        ((GridView)e.Item.FindControl("GridView1")).DataBind();
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-15 20:45:45

也许,不是DataList1.Items[e.Item.ItemIndex].FindControl("HiddenField1"),而是

只需使用e.Item.FindControl("HiddenField1")即可

票数 0
EN

Stack Overflow用户

发布于 2013-02-15 19:49:24

相反,您可以执行以下操作:

代码语言:javascript
复制
<asp:DropDownList ID="DropDownList1" runat="server" DataSource="<%# GetList((int)Eval("C_ID"))%>">
</asp:DropDownList>

在后台代码中

代码语言:javascript
复制
protected DataTable GetList(int id){ }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14894020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档