2017-02-02 3 views
0

Ich halte die folgenden ‚System.ArgumentException‘ Fehler bekommen, dieasp: Gridview Databinding: ‚System.Data.DataTable‘ erlaubt keine indizierten Zugriff

Databinding lautet: ‚System.Data.DataTable‘ nicht Erlaube indexierten Zugriff.

in meinem GridView. Als ich das Projekt es bricht in das HTML-Tag laufen <asp:Label ID="lblTargetName" runat="server" Text='<%# Eval("[TargetName]") %>'></asp:Label>

Dies ist der 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> 

und der Code hinter das Gitter zu binden:

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

Sie sind eine Sammlung von Datentabelle zum gridview Datenquelle zuweisen. Das wird nicht funktionieren. Sie müssen eine der Tabellen aus dem Dataset zuweisen, z. B. "GridView1.DataSource = ds.Tables [0];". Danach sollten Sie auch die '[' und ']' aus dem eval entfernen: Text = '<% # Eval ("TargetName")%>'. Wenn es immer noch nicht funktioniert, sollten Sie uns ein wenig mehr darüber erzählen, was die gespeicherte Prozedur zurückgibt. – user1429080

+0

Danke für die Hilfe funktioniert wie ein Charme. –

Antwort

0

Ihre Gridview auch verfehlt seinen ID- und Runat-Befehl.

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

+0

Leider habe ich vergessen, die ID und Runat in meinem Beispiel hinzuzufügen, aber ich habe diese 2 Elemente. –

Verwandte Themen