C# GridView RowCreated:在读卡器关闭时调用FieldCount的尝试无效
当使用空数据集创建gridview时,我遇到此错误。我试图在EmptyDataTemplate中填充一个下拉列表。从读取其他帖子中,错误是由SqlConnection obejct关闭后使用SqlDataReader绑定gridview引起的。但是,在填充gridview行之后,创建的行不会激发吗C# GridView RowCreated:在读卡器关闭时调用FieldCount的尝试无效,c#,asp.net,C#,Asp.net,当使用空数据集创建gridview时,我遇到此错误。我试图在EmptyDataTemplate中填充一个下拉列表。从读取其他帖子中,错误是由SqlConnection obejct关闭后使用SqlDataReader绑定gridview引起的。但是,在填充gridview行之后,创建的行不会激发吗 protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e) { if (e.Row.RowType =
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.EmptyDataRow)
{
string connectionString3 = ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString;
DropDownList ddl = (DropDownList)e.Row.FindControl("EOCEmpty");
using (SqlConnection conn3 = new SqlConnection(connectionString3))
{
SqlCommand cmd3 = new SqlCommand("SELECT DISTINCT GLAccountEOC, EOCDescription FROM Acct_GLAccount WHERE CostCenter = @CostCenter Order By EOCDescription", conn3);
cmd3.Parameters.Add("@CostCenter", System.Data.SqlDbType.Int);
cmd3.Parameters["@CostCenter"].Value = "3215";
try
{
conn3.Open();
SqlDataReader cmdreader3 = cmd3.ExecuteReader();
ddl.DataSource = cmdreader3;
ddl.DataValueField = "GLAccountEOC";
ddl.DataTextField = "EOCDescription";
ddl.DataBind();
cmdreader3.Close();
}
finally
{
conn3.Close();
}
}
}
}
问题似乎发生在以下几行:
SqlDataReader cmdreader3 = cmd3.ExecuteReader();
ddl.DataSource = cmdreader3;
您应该知道,该方法构建了SqlDataReader
实例(这是只向前的流),并且在尝试访问读取器时,连接似乎关闭了。考虑使用方法打开阅读器并进入第一个记录,或者将内容加载到内存<代码>数据集/<代码> DataTabe/COD>中,并将其用作GRIDVIEW的数据源。
下面是加载SqlDataReader
数据表中的内容的示例:
var dt = new DataTable();
using (SqlConnection conn3 = new SqlConnection(connectionString3))
{
SqlCommand cmd3 = new SqlCommand("SELECT DISTINCT GLAccountEOC, EOCDescription FROM Acct_GLAccount WHERE CostCenter = @CostCenter Order By EOCDescription", conn3);
cmd3.Parameters.Add("@CostCenter", System.Data.SqlDbType.Int);
cmd3.Parameters["@CostCenter"].Value = "3215";
try
{
conn3.Open();
SqlDataReader cmdreader3 = cmd3.ExecuteReader();
if (cmdreader3.HasRows)
{
dt.Load(cmdreader3);
ddl.DataSource = dt; // use DataTable instead of SqlDataReader
ddl.DataValueField = "GLAccountEOC";
ddl.DataTextField = "EOCDescription";
ddl.DataBind();
}
cmdreader3.Close();
}
finally
{
conn3.Close();
}
}
如果问题仍然存在,请使用事件处理程序而不是填充dropdownlist值(请参阅)
类似问题:
那么,您正在绑定读卡器,然后关闭它。您还可以先检查
HasRows
,以确定是否要绑定到reader@Nkosi在我的gridview?中,是的,我正在使用HasRows来确定它。谢谢,我使用了RowDataBound而不是RowCreated,它工作了。