3

ASP.NETメンバーシップと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にそのユーザーが表示されることです。

4

1 に答える 1

1

これは、とが接続されていないためMembershipに発生します。ステータスUsersLinqDataSourceを「更新」して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();
}
于 2012-09-10T13:34:00.353 に答える