0

データリストを使用して、州のリストを含むGridviewを持つ各レコードと、都市のドロップダウンリストを持つ各州を国リストに表示しています。隠しフィールドを使用して国のIDを取得し、隠しフィールドでEval( "C_ID")を使用してすべてのレコードの州名を取得しています。ただし、ArgumentOutOfRangeExceptionが発生します。何が間違っているのかわかりません。データリストのコードは次のとおりです。

<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>

これはコードビハインドです:

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

2 に答える 2

0

代わりに、次の操作を実行できます。

<asp:DropDownList ID="DropDownList1" runat="server" DataSource="<%# GetList((int)Eval("C_ID"))%>">
</asp:DropDownList>

コードの背後にある

protected DataTable GetList(int id){ }
于 2013-02-15T11:49:24.080 に答える
0

おそらく、代わりにDataList1.Items[e.Item.ItemIndex].FindControl("HiddenField1")

使うだけe.Item.FindControl("HiddenField1")

于 2013-02-15T12:45:44.653 に答える