【问题标题】:GridView DataBind does not workGridView 数据绑定不起作用
【发布时间】:2012-09-02 14:00:15
【问题描述】:

我正在使用 ASP.NET Membership 和 Linq。我在这里有一个问题:我在具有删除按钮的网格视图中显示所有用户。看看这段代码:

<asp:GridView 
    ID="UsersGridView" 
    runat="server" 
    AutoGenerateColumns="False" 
    DataSourceID="UsersLinqDataSource" 
    AllowPaging="True">

    <Columns>
        <asp:BoundField DataField="UserName" HeaderText="UserName" ReadOnly="True" SortExpression="UserName" />
        <asp:BoundField DataField="LastActivityDate" HeaderText="LastActivityDate" ReadOnly="True" SortExpression="LastActivityDate" />
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Button ID="DeleteButton" runat="server" CommandArgument='<%# Eval("UserName") %>' Text="Delete" OnClick="DeleteButton_Click"/>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

<asp:LinqDataSource 
    ID="UsersLinqDataSource" 
    runat="server" 
    ContextTypeName="TraceWeb.DataModel.DataContextDataContext" 
    EntityTypeName="" 
    Select="new (UserName, LastActivityDate)" 
    TableName="Users" 
    EnableDelete="True">
</asp:LinqDataSource>

以及删除按钮的事件处理程序:

protected void DeleteButton_Click(object sender, EventArgs e)
{
    String username = (String)((sender as IButtonControl).CommandArgument);
    Membership.DeleteUser(username, true);
    UsersGridView.DataBind();
}

但问题是,在运行此代码并删除用户后,GridView 仍然显示该用户。

【问题讨论】:

  • 您确定Membership.DeleteUser 删除了记录吗?也许它正在将其标记为已删除?
  • @AmiramKorach:MSDN Membership.DeleteUser:“从数据库中删除用户”
  • Membership 删除用户,如果我重新加载页面,GridView 不会显示该用户,所以我认为该用户实际上已被删除。
  • 用户已从数据库中删除。所以问题是我从会员中删除用户而不是 Linq?如果是这样,我应该怎么做才能通知 linq 有新的变化?
  • 从未使用过 LinqDataSource 控件。但是MSDN 说:“当设置了 Select 属性或 GroupBy 属性时,LinqDataSource 控件不支持自动删除操作。在这种情况下,如果尝试删除操作,LinqDataSource 控件将引发异常。 " 所以我假设你遇到了一个异常,你应该将 EnableDelete 设置为 false 或删除选择。

标签: asp.net linq gridview


【解决方案1】:

这是因为MembershipUsersLinqDataSource 没有连接,如果你“刷新”UsersLinqDataSource 状态然后重新绑定你的网格,所有的都会正确显示。

protected void DeleteButton_Click(object sender, EventArgs e)
{
    String username = (String)((sender as IButtonControl).CommandArgument);
    Membership.DeleteUser(username, true);

    // first solution: may not work properly
    UsersLinqDataSource = yourLinqData;

    // second solution: work
    UsersLinqDataSource = null;
    UsersLinqDataSource = yourLinqData;

    UsersGridView.DataBind();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    • 2018-10-27
    相关资源
    最近更新 更多