2011-03-23 4 views
0

사용자가 엑셀 파일을 데이터베이스로 가져올 수 있도록 페이지 작업 중입니다. 사용자가 정보를 커밋하기 전에 특정 필드를 조작하여 Excel 파일에서 DataSet을로드하고 GridView에 바인딩했습니다. RowUpdate에서 어떤 이유로 인해 NewValues ​​컬렉션이 비어 있습니다. 여기 DataSet 소스로 GridView 업데이트

내의 GridView입니다 :

<cc1:WWGridView ID="gvImportDisplay" runat="server" CssClass="grid-view" AllowSorting="false" ShowHeader="true" 
    AutoGenerateColumns="true" 
    AutoGenerateEditButton="true" 
    OnRowEditing="gvImportDisplay_RowEditing" 
    OnRowCancelingEdit="gvImportDisplay_RowCancelingEdit" 
    OnRowUpdating="gvImportDisplay_RowUpdating" 
    > 
    <EmptyDataTemplate>0 results found. </EmptyDataTemplate> 
</cc1:WWGridView> 

그리고 여기 내 코드는 업데이트 뒤에 있습니다 :

protected void gvImportDisplay_RowUpdating(object sender, GridViewUpdateEventArgs e) 
{ 
    foreach (DictionaryEntry entry in e.NewValues) 
    { 
     string headerText = entry.Key.ToString(); 
     if (string.IsNullOrEmpty(headerText)) 
      continue; 
     string newValue = entry.Value.ToString(); 
     if (excelDataSet.Tables["ExcelInfo"].Rows[gvImportDisplay.EditIndex][headerText] == null) 
      continue; 
     excelDataSet.Tables["ExcelInfo"].Rows[gvImportDisplay.EditIndex][headerText] = newValue; 
    } 
    gvImportDisplay.EditIndex = -1; 
    RefreshGridView(); 
} 

"excelDataSet는"포스트 백 사이의 세션에서 저장됩니다 페이지의 속성입니다 . 내가 코드를 단계별로 때

는 foreach는 완전히 생략됩니다 때문에 e.NewValues.Count = 0

NewValues가 비어 왜 사람이 볼 수 있을까요? 업데이트를 수행하기 전에 GridView를 리 바인드해야합니까? 또는 DataKey가 없기 때문에 작동하지 않을 수도 있습니다. 특정 열이 고유하다는 것을 보장 할 수 없기 때문에 DataKey로 사용할 수있는 열이 없습니다.

답변

0

e.NewValues은 아직도 내가이 없기 때문에, 내가 추측하고있어 작동하지 않습니다 데이터 키.

수동으로 열을 정의하고 FindControl을 사용하여 새 값을 가져 와서 업데이트를 작동시킬 수있었습니다. 그리드 뷰의 또 다른 측면에 대해 필자가 수동으로 컬럼을 정의해야 할 것이므로 그와 함께 갈 것입니다.

1

이 경우 양방향 데이터 바인딩이 작동하지 않습니다. 당신은 ObjectDataSource를 설정 데이터를 포장하고 GridView.DataSourceID

를 사용하여이 데이터 소스를 설정해야합니다

예 :

http://msdn.microsoft.com/en-us/library/1se6685s.aspx

+0

좋습니다. 적어도 나만이 아닙니다. 정보 주셔서 감사합니다. – William

관련 문제