2011-01-12 5 views
2

Je vais poster une réponse à une erreur que j'ai eue depuis que j'ai trouvé la solution.Impossible de lancer l'objet de type 'System.Data.DataRowView' pour taper 'System.Data.DataRow'

I a reçu l'erreur dans asp.net: impossible à jeter objet de type 'System.Data.DataRowView' de type 'System.Data.DataRow'

// Old line 
// rpOutils.DataSource = ds.Tables[0].Select("rnco_lang = '" + ddlLang.SelectedValue + "'"); 
// rpOutils.DataSource = ds; // New line that caused the error. I just wanted to pass a DataSet 
rpOutils.DataSource = ds.Tables[0].Select(); // New line with the solution. 
rpOutils.DataBind(); 

protected void rpOutils_ItemDataBound(object sender, RepeaterItemEventArgs e) 
     { 
      if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
      { 
       DataRow row = (DataRow)e.Item.DataItem; // I received the System.InvalidCastException 

...

Le Dataset a renvoyé un DataRowView et la ligne qui a causé le problème s'attendait à un DataRow.

J'ai cherché la solution et je n'ai pas trouvé, donc je l'ai trouvé et posté ma solution. Merci.

+0

Comme l'erreur indiquée: DataRowView row = (DataRowView) e.Item.DataItem; – Win

Répondre

6

Lors de la liaison de données à un DataTable, le moteur de liaison de données appelle l'implémentation IListSource de DataTable et se lie à son DataView.

Étant donné que les DataViews contiennent des objets DataRowView et non DataRows, vous ne pouvez pas convertir les objets liés directement dans DataRow.
Au lieu de cela, vous devez convertir en DataRowView, puis obtenir la propriété .

Pour une explication plus détaillée de la cause de cette situation, voir my blog.

0

utiliser des données dynamiques. il remplit être rempli propriétés.

private void GvRowDataBound(object sender, GridViewRowEventArgs e) 
    { 

     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      dynamic data = e.Row.DataItem; 
      TextBox txtType = (TextBox)e.Row.FindControl("txtbox"); 
      if (data.IsCheked) 
      { 
       txtType.Enabled = false; 
      } 
     } 
    } 
Questions connexes