是否可以在加载gridview后将gridview更改为gridview DataSouce ?



是否可以在gridview加载后将gridview DataSouceId更改为gridview DataSouce ?我有一个gridview,它的DataSouceId等于SqlDatasource。我有一个按钮,当按下执行一些LINQ,我想改变什么是在gridview。

       var sce = from pk in db.Tables
                 where pk.Score > 20
                 select new { pk.First_Name, pk.Last_Name, pk.Score };
    GridView1.DataSourceID = "";
    GridView1.DataSource = sce;
    GridView1.DataBind();

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="First Name" DataSourceID="SqlDataSource2" AllowSorting="True">
    <Columns>
        <asp:BoundField DataField="First Name" HeaderText="First Name" ReadOnly="True" SortExpression="First Name" />
        <asp:BoundField DataField="Last Name" HeaderText="Last Name" SortExpression="Last Name" />
        <asp:BoundField DataField="Score" HeaderText="Score" SortExpression="Score" />
        <asp:BoundField DataField="Nationality" HeaderText="Nationality" SortExpression="Nationality" />
    </Columns>
</asp:GridView>

我试图更改为空字符串。此程序可以编译,但在单击按钮时崩溃。

我所尝试的是可能的吗?

问题是查询定义的列与GridView期望的名称不同。例如,比较:

pk.First_Name

DataField="First Name"

这些是不同的,因此GridView无法在数据源中找到列并抛出异常。

最好的选择是在GridView中使用下划线。这可能需要在初始SQL中进行一些重构,但无论如何都应该这样做——在列名中使用空格是非常脆弱和不常见的,最好完全避免这样做:

<asp:BoundField DataField="First_Name" ...

或者您可以定义一个TemplateField,它查找具有任意名称的列并显示找到的列。但是这听起来像是一个巨大的开销。

相关内容

  • 没有找到相关文章