我一直在尝试绑定一个下拉列表,该列表存在于我的GridView的itemtemplate
中。
但它给了我上述错误“索引1是负数或高于行数。”
我的GridView包含~100行,我想将每个下拉列表与特定数据绑定。错误发生在onRowDataBoundEvent
,并且(通过调试工具)输出异常({1}}方法将GridView与主数据绑定。
以下是代码:
GridBinding
以下是gridbinding的代码:
if (e.Row.RowType == DataControlRowType.DataRow)
{
try
{
DropDownList _ddtpcs = (DropDownList)e.Row.Cells[4].FindControl("_ddtsttpc");
if (_ddtstsubs.SelectedIndex != 0 && _ddtstsubs.SelectedIndex != -1)
{
if (_ddtpcs != null)
{
_ddtpcs.DataSource = _adl.LoadTopics(long.Parse(_ddtstsubs.SelectedValue));
_ddtpcs.DataTextField = "top_nm";
_ddtpcs.DataValueField = "top_id";
_ddtpcs.DataBind();
_ddtpcs.Items.Insert(0, new ListItem("Select", "0"));
}
}
}
catch (Exception ex)
{
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "message", POPUPBuilder.ShowPopUpMsg(ex.ToString()), true);
}
}
GridView中的下拉列表是:
_grdqans.DataSource = _adl.LoadQans(long.Parse(_hdntstId.Value));
_grdqans.DataBind();
LoadTopics方法
<ItemTemplate>
<asp:DropDownList ID="_ddtsttpc" runat="server">
</asp:DropDownList>
</ItemTemplate>
我在这里做错了什么?
答案 0 :(得分:1)
使用以下代码更新LoadTopics
方法
DataTable topicDt = new DataTable();
using(SqlConnection con = new SqlConnection(connectionString))
using(SqlCommand cmd = new SqlCommand("sp_LoadTopics",con))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@subId", _subId);
con.Open();
using(SqlDataAdapter da = new SqlDataAdapter(cmd))
{
da.Fill(topicDt);
}
}
return topicDt;
在您的代码中,您使用了许多类级别对象。这些对象可以为null,也可以关闭连接等。最好在使用数据库时特别使用方法级对象。您可以重用连接字符串,如常量。