asp:GridView DataBinding:' System.Data.DataTable'不允许索引访问

时间:2017-02-02 19:24:00

标签: c# asp.net gridview data-binding visual-studio-2015

我一直得到以下' System.ArgumentException'读错误

  

DataBinding:' System.Data.DataTable'不允许索引访问。

在我的GridView中。当我运行项目时,它会进入html标记<asp:Label ID="lblTargetName" runat="server" Text='<%# Eval("[TargetName]") %>'></asp:Label>

这是HTML:

<asp:GridView>
    <asp:TemplateField HeaderText="TargetName" SortExpression="TargetName">
        <ItemTemplate>
            <asp:Label ID="lblTargetName" runat="server" Text='<%# Eval("[TargetName]") %>'></asp:Label>
        </ItemTemplate>
    </asp:TemplateField>
</asp:GridView>

以及绑定网格的代码:

protected void UpdateGridview()
{
string PlanningType = DropDownList4.SelectedValue.ToString();
string ProductionYear = null;
//SqlDataSource sds = new SqlDataSource();
SqlConnection con = new SqlConnection(DatabaseConnectionString);
SqlDataAdapter da = new SqlDataAdapter();
DataSet ds = new DataSet();

//sds = Page.FindControl("SqlDataSource1") as SqlDataSource;

if (DropDownList5.SelectedValue != "")
    ProductionYear = DropDownList5.SelectedValue.ToString();

try
{
    if (ProductionYear != null)
    {
        using (con)
        {
            con.Open();

            SqlCommand cmd = new SqlCommand("sp_GetSUPPExcelImport", con);

            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add(new SqlParameter("@PlanningType", SqlDbType.VarChar));
            cmd.Parameters["@PlanningType"].Value = PlanningType.ToString();
            cmd.Parameters.Add(new SqlParameter("@ProductionYear", SqlDbType.VarChar));
            cmd.Parameters["@ProductionYear"].Value = ProductionYear;                        

            da = new SqlDataAdapter(cmd);
            ds = new DataSet();
            da.Fill(ds);

            GridView1.DataSource = ds.Tables;
            GridView1.AllowPaging = true;
            GridView1.DataBind();
        }
    }
}
catch (Exception ex)
{
    Label1.ForeColor = Color.Red;
    Label1.Text = ex.Message.ToString();
}
finally
{
    if (da != null)
        da.Dispose();

    if (ds != null)
        ds.Dispose();

    if (con != null)
    {
        con.Close();
        con.Dispose();
    }
}

2 个答案:

答案 0 :(得分:1)

您的GridView也缺少其ID和runat命令。

<asp:GridView runat="server" ID="GridView1">

答案 1 :(得分:0)

我知道这是一个较晚的响应,但是我今天遇到了这个例外,这是我发现处理此问题的极少数地方之一。这可能有助于其他人找出解决方案。

此问题与从SQL Server复制数据元素以及“ []”有关。在这个问题中,OP尝试绑定到标签,并且引发数据绑定错误“不允许索引访问”。

请注意Eval()语句中的括号。卸下支架,一切都会好起来。