【问题标题】:Both DataSource and DataSourceID are defined on listview, remove one sourceDataSource和DataSourceID都定义在listview上,去掉一个源
【发布时间】:2011-01-26 17:09:48
【问题描述】:

自从我将 DataTable 移动到不同的函数后,我遇到了以下错误。

Both DataSource and DataSourceID are defined on 'TestView'.  Remove one definition.

无论如何,如果您有关于样式/标准的提示,我也欢迎您,我对 aspx 编码非常陌生。知道是什么原因造成的吗?当它不是它自己的功能时,它以前没有发生过。是局部变量问题吗?

这是绑定并在错误中突出显示的代码:

testDAO tda = new testDAO();
DataTable testTable = new DataTable("TestView");
testTable = tda.GetTestTable();
TestView.DataSource = testTable;
TestView.DataBind();

GetTestTable() 的代码如下:

public DataTable GetTestTable()
{
    DataTable testTable = new DataTable("TestView");
    testTable.Columns.Add("testdata", typeof(String));
    testTable.Columns.Add("user", typeof(String));
    testTable.Columns.Add("date", typeof(String));
    DataRow arow = testTable.NewRow();
    arow["testdata"] = "test data";
    arow["user"] = "System";
    arow["date"] = "";
    testTable.Rows.Add(arow);
    return testTable;
}

aspx 文件中的列表视图:

<asp:ListView ID="TestView" runat="server">
                <ItemTemplate>
                    <tr id="row" runat="server" class='<%# Container.DataItemIndex % 2 == 0 ? "row" : "altrow" %>'>
                        <td align="left">
                            <%# Eval("testdata") %>
                        </td>
                        <td align="center">
                            <%# Eval("user") %>
                        </td>
                        <td align="center">
                            <%# Eval("date") %>
                        </td>
                    </tr>
                </ItemTemplate>
                <LayoutTemplate>
                    <table class="system">
                        <tr>
                            <th>
                                Test Data
                            </th>
                            <th>
                                User
                            </th>
                            <th>
                                Date
                            </th>
                        </tr>
                        <tr id="itemPlaceholder" runat="server" />
                    </table>
                </LayoutTemplate>
            </asp:ListView>

【问题讨论】:

    标签: c# asp.net listview datatable


    【解决方案1】:

    我认为这是由于一些命名冲突尝试将您的 DataTable 名称或 ListView ID 重命名为 TestListView 之类的其他名称。此外,您还有一个额外的行来创建一个新的 DataTable,这是一个冗余,因为您正在分配从方法 GetTestTable 返回的表

    编辑

    如果您仍然遇到一些问题,那么您可能会通过将 DataSourceID 设置为某些数据源来分配数据源,然后执行以下操作:

    TestView.DataSourceID = null;
    testDAO tda = new testDAO();
    DataTable testTable = tda.GetTestTable();
    TestView.DataSource = testTable;
    TestView.DataBind();
    

    将DataSourceID设置为null肯定能解决问题..

    【讨论】:

    • 是的,解决了 null 的问题。但是,我真正的问题是,Visual Studio 没有保存文件。我一直按保存,但它仍在加载一个旧文件,其中 DataSourceID 已在 aspx 文件中定义。我没有注意到,因为我的编辑没有显示它。错误突出显示了 aspx.cs 文件。 VS 有时候真的很傻。
    • 是的,有时每个人都会发生 ;-).. 很高兴我能帮上忙.. :-)
    【解决方案2】:

    把它改写成这个

    testDAO tda = new testDAO();
    TestView.DataSource = tda.GetTestTable();
    TestView.DataBind();
    

    应该这样做 - 无需创建 DataTable,然后从 tda.GetTestTable() 为其分配数据表

    【讨论】:

    • 说得有道理,我试过了,但它仍然给出同样的错误,并向我显示修改后的代码突出显示。它仍然突出显示 DataBind() 行。
    猜你喜欢
    • 1970-01-01
    • 2012-04-29
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多