4

asp.net で奇妙な問題が発生していGridViewます。にGridViewバインドされていLinqDataSourceます。の行GridView削除イベントで、データベースから行を削除していますが、グリッドは更新されません (データソースに BINDING した後でも)。

OnRowDeletingブレークポイントを設定すると、イベントの後にイベントが発生することがわかりましたLinqDS_Selecting。しかし、削除イベントの後に再び発生することはありません! それが理由でしょうか?私は何を間違っていますか?

誰か助けてください。事前に感謝します。

.aspx ファイル:

<asp:LinqDataSource
    ID="LinqDS"
    runat="server"
    OnSelecting="LinqDS_Selecting">
</asp:LinqDataSource>

<asp:GridView
    DataSourceID = "LinqDS"
    ID = "gv1"
    runat = "server"  
    DataKeyNames = "InstructionId"
    EnableViewState = "false"
    OnRowDataBound = "gv1_RowDataBound" 
    OnRowDeleting = "gv1_RowDeleting" 
    OnRowCommand = "gv1_RowCommand"
    PageSize = "30" >
    <Columns>
        <!-- My colums --->
    </Columns>
</asp:GridView>

.aspx.cs

protected void Page_Load(object sender, EventArgs e)
{

}

protected void LinqDS_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
    // my linq to sql query
    var query = from  .... .... ;
    e.Result = query;
}

protected void gv1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
    int instructionId = (int)gv1.DataKeys[e.RowIndex].Value;
    /// my delete logic
    CTX.SubmitChanges();
    gv1.DataBind();
}
4

3 に答える 3

1

コードのエラーを指摘することはできませんが、データを削除するために行ったコードを提供しています。

<asp:GridView ID="GridView1" runat="server" OnRowDeleting="Del" DataKeyNames="Clg_ID" BackColor="#DEBA84" 
                BorderColor="#DEBA84" BorderStyle="None" BorderWidth="1px" CellPadding="3" 
                CellSpacing="2">
                <Columns>
                    <asp:CommandField ShowDeleteButton="True" />
                </Columns>
                <FooterStyle BackColor="#F7DFB5" ForeColor="#8C4510" />
                <HeaderStyle BackColor="#A55129" Font-Bold="True" ForeColor="White" />
                <PagerStyle ForeColor="#8C4510" HorizontalAlign="Center" />
                <RowStyle BackColor="#FFF7E7" ForeColor="#8C4510" />
                <SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="White" />
                <SortedAscendingCellStyle BackColor="#FFF1D4" />
                <SortedAscendingHeaderStyle BackColor="#B95C30" />
                <SortedDescendingCellStyle BackColor="#F1E5CE" />
                <SortedDescendingHeaderStyle BackColor="#93451F" />
            </asp:GridView>

.csファイル

protected void Del(object sender, GridViewDeleteEventArgs e)
    {
        string i = GridView1.DataKeys[0].Value.ToString();
        SqlConnection cn = new SqlConnection();
        cn.ConnectionString = ConfigurationManager.ConnectionStrings["cn"].ConnectionString.ToString();
        cn.Open();
        SqlCommand cmd = new SqlCommand("Delete from Feedback where Clg_ID='" + i + "'", cn);
        cmd.ExecuteNonQuery();
        cmd.Dispose();
        cn.Close();
        Response.Redirect("MFeedback.aspx");
    }
于 2013-01-14T10:34:59.837 に答える
1

レコードが実際に正しく削除され、グリッドに変更が表示されない場合は、GridView を UpdatePanel 内に配置して、これが役立つかどうかを確認します。

<asp:UpdatePanel runat="server" UpdateMode="Always">
    <ContentTemplate>
        // GridView
    </ContentTemplate>
</asp:UpdatePanel>
于 2012-11-16T11:06:09.287 に答える
0

GridView のメソッドでEditIndexGridView を -1 に設定してみてください。ItemDeleting

protected void gv1_RowDeleting(object sender, GridViewDeleteEventArgs e) {
    gv1.EditIndex = -1;
    gv1.DataBind();
}

削除ロジックをRowCommandGridView のメソッドに移動します。

protected void gv1_RowCommand(object sender, GridViewDeleteEventArgs e) {
    If (e.CommandName == "Delete") {
        int instructionId = (int) gv1.DataKeys[e.RowIndex].Value;
        /// my delete logic
        CTX.SubmitChanges();
    }
}

削除アクションのコントロールは次のようになります。

<asp:LinkButton ID="lbDel" runat="server" Text="Delete" CommandName="Delete" />
于 2012-11-16T10:58:55.067 に答える