2017-02-02 12 views
0

я получаю следующее сообщение об ошибке 'System.ArgumentException', который читаетжерех: GridView DataBinding: 'System.Data.DataTable' не позволяет индексированный доступ

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

Вы назначаете коллекцию DataTable к GridView источника данных. Это не сработает. Вам нужно назначить одну из таблиц из набора данных, например 'GridView1.DataSource = ds.Tables [0];'. После этого вы также должны удалить '[' и ']' из eval: Text = '<% # Eval ("TargetName")%>'. Если он все равно не будет работать, вы должны сообщить нам немного больше о том, что возвращает хранимая процедура. – user1429080

+0

Спасибо, что помогли работать как шарм. –

ответ

0

Ваш GridView также недостающую его ID и runat.

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

+0

Извините, что я забыл добавить ID и runat в свой пример, но у меня есть эти 2 элемента. –