2011-10-06 3 views
1

그래서 OnRowUpdating 이벤트 중에 Gridview에서 업데이트를 수행하는 데 문제가 있습니다.GridView RowUpdating CodeBehind의 SqlDataSource.Update

내가하려는 것은 SqlDataSource에서 UpdateCommand를 설정 한 다음 해당 명령을 사용하여 업데이트하는 것입니다. 이벤트가 발생하고 있지만 이벤트가 완료되면 행이 업데이트되지 않는 것처럼 보입니다.

C 번호 :

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) 
{ 
    SqlDataSource1.UpdateCommand = "UPDATE A_Table SET Something = @AValue WHERE ID = " + e.RowIndex; 

    SqlDataSource1.Update(); 
} 

편집 : 내 예를 들어 업데이트 명령을 쓴 다시 ... 정말 업데이트 명령이 아닌 선택 명령 하하입니다.

+1

'GridView'에 대해'DataKeyNames'가 설정되어 있고'SQLDataSource1' 마크 업에 정의 된'UpdateCommand'를 가지고 있다면'RowUpdating' 이벤트에서 아무 것도 할 필요가 없습니다. 여기서 Update() 메소드를 호출하면 UPDATE가 두 번 발생하게된다. – jadarnel27

+1

@ jadarnel27이 맞습니다. 'DataKeyNames'가 설정되어 있다면'RowUpdating' 핸들러에서'Update()'를 호출하면 StackOverflowExeption이 발생합니다! –

답변

2

여기에 다른 답변이 UpdateCommand으로 문제를 지적에 아주 정확보십시오.

이전에 언급 한 바와 같이, 나는 이것이 당신이 가지고있는 것보다 약간 쉽다는 것을 지적 할 것입니다. SQLDataSource과 함께 GridView을 사용할 때 제대로 설정하면 많은 작업이 완료됩니다.

우선,이처럼 SQLDataSource의 마크 업에 UpdateCommand을 정의

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="Your Connection String Here" 
    ProviderName="System.Data.SqlClient" 
    SelectCommand="SELECT ColPK, ColA, ColB, ColC FROM Table_Name" 
    UpdateCommand="UPDATE Table_Name 
        SET [email protected], [email protected], [email protected], 
        WHERE [email protected]"> 
</asp:SqlDataSource> 

(ColPK 테이블이 업데이트하고의 주요 열쇠가 될 것이다)

그렇다면, 당신은 할 수 있습니다 귀하의 GridView 마크 업에서 "AutoGenerateEditButton"을 true로 설정하십시오! 코드 뒤에 아무 것도하지 않고도 GridView을 업데이트 할 수 있습니다. 이제

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
    AutoGenerateEditButton="True" DataKeyNames="ColPK" 
    DataSourceID="SqlDataSource1"> 
    <Columns> 
     <asp:BoundField DataField="ColPK" HeaderText="Column PK" 
      SortExpression="ColA" ReadOnly="True" /> 
     <asp:BoundField DataField="ColA" HeaderText="Column A" 
      SortExpression="ColA" /> 
     <asp:BoundField DataField="ColB" HeaderText="Column B" 
      SortExpression="ColB" /> 
     <asp:BoundField DataField="ColC" HeaderText="Column C" 
      SortExpression="ColC" /> 
    </Columns> 
</asp:GridView> 

, 당신은 아직도 당신이 추가 처리를해야 할 경우 코드에서 OnRowUpdating 이벤트를 처리하거나 등 일부 로직, 그러나 기본적인 업데이트 기능을 기반으로 Update을 취소 할 수 있습니다하면 무료로 꽤 많이 있습니다!

+0

그 트릭을 했어! 고마워. :). –

+0

@Derrick 대단히 반갑습니다! – jadarnel27

2

명령이 아니라 사용자의 UpdateCommand가 UPDATE 명령이어야합니다.

SqlDataSource1.UpdateCommand = "SELECT Something FROM A_Table WHERE ID = " + e.RowIndex; 

변경 그 선이 가까이 뭔가 :

SqlDataSource1.UpdateCommand = "UPDATE A_Table SET Something = @Something WHERE ID = " + e.RowIndex; 

UpdateCommand 사용하는 방법에 대한 자세한 정보를 원하시면,이 MSDN의 링크를 참조하십시오 : 모든

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.sqldatasource.updatecommand.aspx

2

먼저, UpdateCommand처럼 굴지 말라 UPDATE A_Table SET ID = .. WHERE ...?

나는 당신이 뭔가 빠져 있다고 생각합니다. Insert Update Edit Delete record in GridView을 읽으십시오. 이것은 당신을위한 훌륭한 기사입니다.

편집 :처럼 카일리 말 : SqlDataSource1.UpdateCommand = "UPDATE A_Table SET Something = @Something WHERE ID = " + e.RowIndex;

+0

Opps는 실제로 corrent가 아닙니다. 내가 감정적 인 정보를 포함하고 있기 때문에 나는 스크립트를 게시하지 않았다, 나는 방금 생각을 잘못 작성했다. 업데이트 명령은 실제로 문제가 아니며 실제로 실행되도록합니다. –