2012-11-08 3 views
4

asp.net GridView에 이상한 문제가 있습니다. 나는 LinqDataSource에 묶여진 GridView을 가지고 있습니다. GridView 님의 행 삭제 이벤트에서 데이터베이스에서 행을 삭제하려고하는데 그리드가 새로 고쳐지지 않습니다 (데이터 소스에 바인딩 한 후에도).이벤트 삭제 후 GridView가 새로 고쳐지지 않습니다.

중단 점을 넣으면 LinqDS_Selecting 이벤트 이후에 OnRowDeleting 이벤트가 발생하는 것을 확인할 수 있습니다. 그러나 그것은 삭제 이벤트 후에 다시 해고되지 않았습니다! 이유가 될 수 있을까요? 내가 도대체 ​​뭘 잘못하고있는 겁니까?

도와주세요. 사전에 많은 감사드립니다.

에서 .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(); 
} 
+0

파일은'해고 gv1_RowDeleting'나요? 만약 그렇다면 아마'LinqDS.DataBind()'를 만들 필요가있을 것입니다. – Aristos

+0

gv1_RowDeleting 이벤트가 발생하고 실제로 제거하려는 값이 데이터베이스에서 제거 되었습니까? –

답변

0

의 GridView의 ItemDeleting 방법에 -1로의 GridView의 EditIndex을 설정하십시오 :

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

을 삭제하고 로직을 RowCommand G로 변경하십시오. ridView :

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" /> 
1

단순히 변화를 보여주는 나는 시도하고를 둘 것 아닌 기록이 실제로 제대로 삭제되고 격자 인 경우 UpdatePanel 안의 GridView를 살펴보고 도움이되는지 확인하십시오.

<asp:UpdatePanel runat="server" UpdateMode="Always"> 
    <ContentTemplate> 
     // GridView 
    </ContentTemplate> 
</asp:UpdatePanel> 
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"); 
    } 
관련 문제