无法转换类型为“System.Data.DataRowView”的对象输入“System.Data.DataRow”

发布于 2024-10-11 19:49:29 字数 851 浏览 3 评论 0原文

我将发布自从找到解决方案以来遇到的错误的答案。

我在 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。

我搜索了解决方案并没有找到,所以我找到了并发布了我的解决方案。谢谢。

I will post an answer to an error I had since I found the solution.

I received the error in asp.net: Unable to cast object of type 'System.Data.DataRowView' to 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

...

The Dataset returned a DataRowView and the line that caused the problem expected a DataRow.

I searched for the solution and didn't find, so I found it and posted my solution. Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦在夏天 2024-10-18 19:49:29

当数据绑定到 DataTable 时,数据绑定引擎将调用 DataTable 的 IListSource 实现并绑定到其 DataView

由于 DataView 保存 DataRowView 对象而不是 DataRow,因此您无法将绑定对象直接转换为 DataRow。
相反,您需要转换为 DataRowView,然后获取 Row 属性。

有关发生这种情况的更详细说明,请参阅我的博客

When databinding to a DataTable, the databinding engine will call the DataTable's IListSource implementation and bind to its DataView.

Since DataViews hold DataRowView objects and not DataRows, you cannot cast the bound objects directly to DataRow.
Instead, you need to cast to DataRowView, then get the Row property.

For a more detailed explanation of why this happens, see my blog.

终陌 2024-10-18 19:49:29

使用动态数据。它填充被填充属性。

    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;
            }
        }
    }

use dynamic data . it fill be filled properties.

    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;
            }
        }
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文