使用DataSet源更新GridView

时间:2011-03-23 21:28:52

标签: asp.net gridview dataset

我正在使用一个页面让用户将excel文件导入我们的数据库。我想允许用户在提交信息之前操作某些字段,因此我从Excel文件加载了一个DataSet并将其绑定到GridView。出于某种原因,在rowUpdate上我的NewValues集合是空的。

这是我的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的列,因为我无法保证任何特定列都是唯一的。

2 个答案:

答案 0 :(得分:1)

我猜两种数据绑定在这种情况下不起作用。您应该将数据集包装在ObjectDataSource中,并使用GridView.DataSourceID

设置此数据源

示例:

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

答案 1 :(得分:0)

e.NewValues仍然不起作用,我猜是因为我没有DataKeys。

通过手动定义列并执行FindControl来获取新值,我能够获得更新。由于我将不得不为网格视图的另一个方面手动定义列,我将继续使用它。