2010-08-25 57 views
1

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

我正在使用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][email protected])"> 

          <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 [email protected])) 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> 

回答

1

只是一个长镜头真的。你有没有尝试过设置DataKeyNames属性?

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

msdn

使用OldValues财产 (字典)来访问领域的原始 值的行中 更新。该字典包含除键 字段以外的所有行中的 字段。关键字段在 GridView控件的DataKeyNames属性中定义为 。

+0

我尝试添加的DataKeyNames = “专案编号” ,它仍然没有工作。 – 2010-08-25 21:38:50

相关问题