Невозможно привести объект типа «System.Data.DataRowView» к типу «System.Data.DataRow». - PullRequest
2 голосов
/ 12 января 2011

Я опубликую ответ на ошибку, которая возникла с тех пор, как я нашел решение.

Я получил ошибку в asp.net: Невозможно привести объект типа 'System.Data.DataRowView' к типу '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

...

Набор данных возвратил DataRowView, а строка, вызвавшая проблему, ожидала DataRow.

Я искал решение и не нашел, поэтому нашел его и опубликовал свое решение. Благодаря.

Ответы [ 2 ]

6 голосов
/ 12 января 2011

При привязке данных к DataTable механизм привязки данных вызовет реализацию IListSource DataTable и свяжется с DataView.

.

Поскольку DataViews содержат объекты DataRowView, а не DataRows, вы не можете привести привязанные объекты непосредственно к DataRow.
Вместо этого вам необходимо привести к DataRowView, а затем получить свойство Row.

Более подробное объяснение того, почему это происходит, см. мой блог .

0 голосов
/ 16 августа 2016

использовать динамические данные. заполнить будут заполнены свойства.

    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;
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...