在RowUpdating事件中获取旧的Gridview Row值

时间:2010-08-25 21:02:48

标签: asp.net gridview

如何在row_updating事件的gridview行中获取旧值?

我正在使用sqldatasource控件来填充网格,并希望在RowUpdating事件中编写更新代码。

网格中显示10个字段。

我可以使用

获取第一个字段的值
string old_Category = e.OldValues[0].ToString();.

但它不适用于大于0的索引项。这不起作用

string old_Category = e.OldValues[1].ToString();

它会返回错误消息

Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index

即使网格中有10列。

======================================== 这是gridview标记

            <asp:GridView 
                ID="GridView1" 
                runat="server" 
                AutoGenerateColumns="False" 
                DataSourceID="SqlDataSource1" 
                BorderWidth="0px"
                BorderStyle="None" 
                Width="100%" 
                CellPadding="2" 
                PageSize="25" 
                OnRowDeleting="ProjectListGridView_RowDeleting" 
                onrowdatabound="GridView1_RowDataBound" 
                onrowupdating="GridView1_RowUpdating" onrowediting="GridView1_RowEditing" >
                <Columns>
                    <asp:CommandField ShowEditButton="True" />
                    <asp:TemplateField HeaderText="WeekEnding" SortExpression="WeekEnding">

                        <ItemTemplate>
                            <asp:Label ID="lblWeekEnding" runat="server" Text='<%# Bind("WeekEnding") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Project" SortExpression="Project">
                       <EditItemTemplate>

                            <asp:DropDownList 
                                ID="DropDownList1" 
                                runat="server" 
                                DataSourceID="sdsDdlProjectsEdit" 
                                DataTextField="ProjectName" 
                                DataValueField="ProjectID" 
                                AutoPostBack="True" onselectedindexchanged="DropDownList1_SelectedIndexChanged" 

                                >
                            </asp:DropDownList>

                            <asp:SqlDataSource 
                                ID="sdsDdlProjectsEdit" 
                                runat="server" 
                                ConnectionString="<%$ ConnectionStrings:ttuser %>" 
                                SelectCommand="SELECT ProjectID,ProjectName FROM dbo.aspnet_starterkits_Projects">
                            </asp:SqlDataSource>

                        </EditItemTemplate>
                        <ItemTemplate>
                            <asp:Label ID="Label1" runat="server" Text='<%# Bind("Project") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>

                    <asp:TemplateField HeaderText="Category" SortExpression="Category">

                        <EditItemTemplate>


                            <asp:DropDownList 
                                ID="DropDownList2" 
                                runat="server" 
                                DataSourceID="sdsDDL2" 
                                DataTextField="CategoryName" 
                                DataValueField="CategoryID">
                            </asp:DropDownList>

                            <asp:SqlDataSource 
                            runat="server" 
                            ID="sdsDDL2"
                            ConnectionString="<%$ ConnectionStrings:ttuser %>"
                            SelectCommand="SELECT [CategoryID], [CategoryName],[ProjectID] FROM dbo.aspnet_starterkits_ProjectCategories WHERE ([ProjectID]=@ProjectID)">

                             <SelectParameters>
                                 <asp:Parameter Name="ProjectID" />
                             </SelectParameters>

                            </asp:SqlDataSource>



                        </EditItemTemplate>

                        <ItemTemplate>
                            <asp:Label ID="Label2" runat="server" Text='<%# Bind("Category") %>'></asp:Label>
                        </ItemTemplate>

                    </asp:TemplateField>

                    <asp:TemplateField HeaderText="Sun" SortExpression="Sun">
                        <EditItemTemplate>
                            <asp:TextBox ID="txtSunEdit" runat="server" Text='<%# Eval("Sun") %>' Columns="2"></asp:TextBox>
                        </EditItemTemplate>
                        <ItemTemplate>

                            <asp:Label ID="lblSun" runat="server" Text='<%# Bind("Sun") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>

                    <asp:TemplateField HeaderText="Mon" SortExpression="Mon">
                        <EditItemTemplate>
                            <asp:TextBox ID="txtMonEdit" runat="server" Text='<%# Eval("Mon") %>' Columns="2"></asp:TextBox>
                        </EditItemTemplate>
                        <ItemTemplate>

                            <asp:Label ID="Label4" runat="server" Text='<%# Bind("Mon") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Tue" SortExpression="Tue">
                        <EditItemTemplate>
                            <asp:TextBox ID="txtTueEdit" runat="server" Text='<%# Eval("Tue") %>' Columns="2"></asp:TextBox>
                        </EditItemTemplate>
                        <ItemTemplate>
                            <asp:Label ID="Label5" runat="server" Text='<%# Bind("Tue") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Wed" SortExpression="Wed">
                        <EditItemTemplate>
                            <asp:TextBox ID="txtWedEdit" runat="server" Text='<%# Eval("Wed") %>' Columns="2"></asp:TextBox>
                        </EditItemTemplate>
                        <ItemTemplate>
                            <asp:Label ID="Label6" runat="server" Text='<%# Bind("Wed") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Thu" SortExpression="Thu">
                        <EditItemTemplate>
                            <asp:TextBox ID="txtThuEdit" runat="server" Text='<%# Eval("Thu") %>' Columns="2"></asp:TextBox>
                        </EditItemTemplate>
                        <ItemTemplate>
                            <asp:Label ID="Label7" runat="server" Text='<%# Bind("Thu") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Fri" SortExpression="Fri">
                        <EditItemTemplate>
                            <asp:TextBox ID="txtFriEdit" runat="server" Text='<%# Eval("Fri") %>' Columns="2"></asp:TextBox>
                        </EditItemTemplate>
                        <ItemTemplate>
                            <asp:Label ID="Label8" runat="server" Text='<%# Bind("Fri") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Sat" SortExpression="Sat">
                        <EditItemTemplate>
                            <asp:TextBox ID="txtSatEdit" runat="server" Text='<%# Eval("Sat") %>' Columns="2"></asp:TextBox>
                        </EditItemTemplate>
                        <ItemTemplate>
                            <asp:Label ID="Label9" runat="server" Text='<%# Bind("Sat") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>

这是sqldatasource

                    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
                        ConnectionString="<%$ ConnectionStrings:ttuser %>" 
SelectCommand="SELECT
   @WeekEnding   WeekEnding
  ,Project
  ,ProjectID
  ,Category
  ,CategoryID
  ,isnull([1], 0)  Sun
  ,isnull([2], 0)  Mon
  ,isnull([3], 0)  Tue
  ,isnull([4], 0)  Wed
  ,isnull([5], 0)  Thu
  ,isnull([6], 0)  Fri
  ,isnull([7], 0)  Sat
 from 
(select P.ProjectName Project,P.ProjectID, CAT.CategoryName Category,CAT.CategoryID, Datepart(dw, TE.TimeEntryDate) DOW, TE.TimeEntryDuration Hours
 FROM 
dbo.aspnet_starterkits_TimeEntry TE inner join
dbo.aspnet_starterkits_ProjectCategories CAT on
TE.CategoryID=CAT.CategoryID inner join
dbo.aspnet_starterkits_Projects P on
CAT.ProjectID=P.ProjectID
Where (TE.TimeEntryDate between dateadd(dd, -6, @WeekEnding) and @WeekEnding) AND
TE.TimeEntryUserID=(SELECT UserId FROM dbo.aspnet_Users WHERE UserName=@UserName)) Source
  pivot (max(Hours)for DOW in ([1],[2],[3],[4],[5],[6],[7]) ) as pvt" OldValuesParameterFormatString="original_{0}" 




                        <SelectParameters>
                            <asp:ControlParameter ControlID="WeekEnding2" Name="WeekEnding" 
                                PropertyName="Text" />
                            <asp:ControlParameter ControlID="UserList" Name="UserName" 
                                PropertyName="SelectedValue" />
                        </SelectParameters>



                    </asp:SqlDataSource>

2 个答案:

答案 0 :(得分:2)

只需将Enableviewstate属性设置为gridview的false即可获得新值

参考: http://www.codeproject.com/Questions/139076/not-getting-new-entered-values-on-grid-view-row-up

答案 1 :(得分:1)

真的是一个长镜头。您是否尝试过设置DataKeyNames属性?

<asp:gridview id="GridView1" 
...
          DataKeyNames="ProjectID"
/>

来自msdn

  

使用OldValues属性   (字典)访问原文   行中字段的值为   更新。这本词典包含所有   除键之外的行中的字段   领域。关键字段定义于   一个的DataKeyNames属性   GridView控件。