2016-08-03 249 views
-1

我正在使用网格视图同时更新网格中的所有行。这段代码完美地工作在另一页上。现在的区别是我调用存储过程,因为我有3个表需要更新。我没有收到任何错误,但在表格中没有任何更新。我相信这些参数没有正确传递。存储过程不处理绑定到gridview的行的批量更新

<asp:GridView ID="GridView1" runat="server" BackColor="White" BorderColor="#999999" BorderStyle="Solid" BorderWidth="1px" CellPadding="3" 
      DataSourceID="SqlDataSource1" ForeColor="Black" GridLines="Vertical" AutoGenerateColumns="False" DataKeyNames="CUST_ORDER_ID"> 
     <AlternatingRowStyle BackColor="#CCCCCC" /> 
     <Columns> 

      <asp:BoundField DataField="CUST_ORDER_ID" HeaderText="ORDER_ID" SortExpression="CUST_ORDER_ID"> 
      <ItemStyle Width="50px"></ItemStyle> 
      </asp:BoundField> 
      <asp:BoundField DataField="NAME" HeaderText="NAME" ReadOnly="True" SortExpression="NAME"> 
      <ItemStyle Width="400px"></ItemStyle> 
      </asp:BoundField> 
      <asp:BoundField DataField="ORDERDATE" HeaderText="ORDER DATE" DataFormatString="{0:d}" ReadOnly="True" SortExpression="ORDERDATE"> 
      <ItemStyle Width="100px"></ItemStyle> 
      </asp:BoundField>    
      <asp:BoundField DataField="DESIREDSHIPDATE" HeaderText="DESIRED SHIP DATE" SortExpression="DESIREDSHIPDATE" DataFormatString="{0:d}" ReadOnly="True" ItemStyle-Width="100" > 
      <ItemStyle Width="100px"></ItemStyle> 
      </asp:BoundField> 
      <asp:BoundField DataField="PROMISEDATE" HeaderText="PROMISE DATE" SortExpression="PROMISEDATE" DataFormatString="{0:d}" ReadOnly="True" ItemStyle-Width="100"> 
      <ItemStyle Width="100px"></ItemStyle> 
      </asp:BoundField> 
      <asp:BoundField DataField="PROMISEDELDATE" HeaderText="DELIVERY DATE" SortExpression="PROMISEDELDATE" DataFormatString="{0:d}" ReadOnly="True" ItemStyle-Width="100" > 
      <ItemStyle Width="100px"></ItemStyle> 
      </asp:BoundField> 
      <asp:TemplateField HeaderText="TRIP_ORDER" SortExpression="TRIP_ORDER" ItemStyle-Width="500"> 
        <EditItemTemplate> 
         <asp:textbox ID="TextBox3" runat="server" Text='<%# Bind("TRIP_ORDER") %>'></asp:textbox> 
        </EditItemTemplate> 
        <ItemTemplate> 
         <asp:TextBox ID="TripOrderTextBox" runat="server" Text='<%# Bind("TRIP_ORDER") %>' Width="25px"></asp:TextBox> 
        </ItemTemplate> 
       <ItemStyle Width="25px"></ItemStyle> 
       </asp:TemplateField> 

      <asp:BoundField DataField="ORDER_LINE_SUMMARY" HeaderText="ORDER LINE SUMMARY" SortExpression="ORDER_LINE_SUMMARY"> 
      <ItemStyle Width="50px"></ItemStyle> 
      </asp:BoundField> 

      <asp:TemplateField HeaderText="JOB_DEL_NOTES" SortExpression="JOB_DEL_NOTES" ItemStyle-Width="500"> 
        <EditItemTemplate> 
         <asp:textbox ID="TextBox1" runat="server" Text='<%# Bind("JOB_DEL_NOTES") %>'></asp:textbox> 
        </EditItemTemplate> 
        <ItemTemplate> 
         <asp:TextBox ID="JobDelNotesTextBox" runat="server" Text='<%# Bind("JOB_DEL_NOTES") %>' Rows="3" TextMode="MultiLine" Width="500px" onkeypress="return this.value.length<=79" MaxLength="80"></asp:TextBox> 
        </ItemTemplate> 
       <ItemStyle Width="500px"></ItemStyle> 
       </asp:TemplateField> 
      <asp:TemplateField HeaderText="ORDER_DEL_NOTES" SortExpression="ORDER_DEL_NOTES" ItemStyle-Width="500"> 
        <EditItemTemplate> 
         <asp:textbox ID="TextBox2" runat="server" Text='<%# Bind("ORDER_DEL_NOTES") %>'></asp:textbox> 
        </EditItemTemplate> 
        <ItemTemplate> 
         <asp:TextBox ID="OrderDelNotesTextBox" runat="server" Text='<%# Bind("ORDER_DEL_NOTES") %>' Rows="3" TextMode="MultiLine" Width="500px" onkeypress="return this.value.length<=79" MaxLength="80"></asp:TextBox> 
        </ItemTemplate> 
       <ItemStyle Width="500px"></ItemStyle> 
       </asp:TemplateField> 

     </Columns> 
     <FooterStyle BackColor="#CCCCCC" /> 
     <HeaderStyle BackColor="Black" Font-Bold="True" ForeColor="White" /> 
     <PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" /> 
     <SelectedRowStyle BackColor="#000099" Font-Bold="True" ForeColor="White" /> 
     <SortedAscendingCellStyle BackColor="#F1F1F1" /> 
     <SortedAscendingHeaderStyle BackColor="#808080" /> 
     <SortedDescendingCellStyle BackColor="#CAC9C9" /> 
     <SortedDescendingHeaderStyle BackColor="#383838" /> 
    </asp:GridView> 


     <asp:SqlDataSource ID="SqlDataSource1" runat="server" CancelSelectOnNullParameter="false" ConnectionString="<%$ ConnectionStrings:ConnectionStringTest %>" 
      ProviderName="<%$ ConnectionStrings:ConnectionStringTest.ProviderName %>" 
      SelectCommandType="StoredProcedure" SelectCommand="CM_GET_SCHEDULED_ORDERS" 
      UpdateCommandType="StoredProcedure" UpdateCommand="CM_SP_UPDATE_TRIP"> 

      <SelectParameters> 
       <asp:QueryStringParameter Name="DELIVERY_DATE" DbType="DateTime" Direction="Input" QueryStringField="PROMISE_DEL_DATE" DefaultValue="" /> 
       <asp:Parameter Name="UPDATE_TRIP" DefaultValue="YES" Type="String" /> 
      </SelectParameters> 
      <UpdateParameters> 
       <asp:Parameter Name="CUST_ORDER_ID" DefaultValue="" Type="String" Direction="Input" /> 
       <asp:Parameter Name="ORDER_LINE_SUMMARY" Type="String" Direction="Input" /> 
       <asp:Parameter Name="TRIP_ORDER" DefaultValue="" Type="String" Direction="Input"/> 
       <asp:Parameter Name="PROMISEDELDATE" Defaultvalue="" Type="datetime" Direction="Input"/> 
       <asp:Parameter Name="JOB_DEL_NOTES" Type="String" Direction="Input"/> 
       <asp:Parameter Name="ORDER_DEL_NOTES" Type="String" Direction="Input"/> 
      </UpdateParameters> 

     </asp:SqlDataSource> 

我后面的代码:

Imports Microsoft.VisualBasic 
Imports System.Data 
Imports System.Configuration 
Imports System.Data.SqlClient 

Public Class UpdateTrip 
Inherits System.Web.UI.Page 

Private tableCopied As Boolean = False 
Private originalDataTable As System.Data.DataTable 

Protected Sub Page_load(sender As Object, e As EventArgs) Handles Me.Load 
    If Not IsPostBack Then 
     SetDateTextBox.Text = Request.QueryString("PROMISE_DEL_DATE") 
    End If 

End Sub 
Protected Sub btnRedirect_Click(sender As Object, e As EventArgs) 
    Response.Redirect("~/UpdateTrip.aspx?PROMISE_DEL_DATE=" + SetDateTextBox.Text) 
End Sub 

Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound 
    If e.Row.RowType = DataControlRowType.DataRow Then 
     If Not tableCopied Then 
      originalDataTable = CType(e.Row.DataItem, System.Data.DataRowView).Row.Table.Copy() 
      ViewState("originalValuesDataTable") = originalDataTable 
      tableCopied = True 
     End If 
    End If 
End Sub 

Protected Sub UpdateButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles UpdateTrip.Click 
    originalDataTable = CType(ViewState("originalValuesDataTable"), System.Data.DataTable) 

    For Each r As GridViewRow In GridView1.Rows 
     'If IsRowModified(r) Then GridView1.UpdateRow(r.RowIndex, False) 
     GridView1.UpdateRow(r.RowIndex, False) 
    Next 

    ' Rebind the Grid to repopulate the original values table. 
    'tableCopied = False 
    'GridView1.DataBind() 
    Response.Redirect("~/UpdateTrip.aspx?PROMISE_DEL_DATE=" + SetDateTextBox.Text) 

End Sub 

'Protected Function IsRowModified(ByVal r As GridViewRow) As Boolean 
' Dim currentID As String 
' Dim currentTripOrder As String 
' Dim currentJobDelNotes As String 
' Dim currentOrderDelNotes As String 

' currentID = Convert.ToInt32(GridView1.DataKeys(r.RowIndex).Value) 

' currentTripOrder = CType(r.FindControl("TripOrderTextBox"), TextBox).Text 
' currentJobDelNotes = CType(r.FindControl("JobDelNotesTextBox"), TextBox).Text 
' currentOrderDelNotes = CType(r.FindControl("OrderDelNotesTextBox"), TextBox).Text 

' Dim row As System.Data.DataRow = 
'  originalDataTable.Select(String.Format("cust_order_id = {0}", currentID))(0) 

' If Not currentTripOrder.Equals(row("Trip_order").ToString()) Then Return True 
' If Not currentJobDelNotes.Equals(row("Job_Del_Notes").ToString()) Then Return True 
' If Not currentOrderDelNotes.Equals(row("Order_Del_Notes").ToString()) Then Return True 
' Return False 
'End Function 

Protected Sub Calendar1_SelectionChanged(sender As Object, e As EventArgs) Handles Calendar1.SelectionChanged 
    SetDateTextBox_PopupControlExtender.Commit(Calendar1.SelectedDate) 
End Sub 

末级

存储过程

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 



-- ============================================= 
-- Author:  <Michael Mueller> 
-- Create date: <8/3/2016> 
-- Description: <update multiple tables for the trip order. customer_order. cust_order_line, cust_address> 
-- ============================================= 
ALTER PROCEDURE [dbo].[CM_SP_UPDATE_TRIP] 
    -- Add the parameters for the stored procedure here 
    @CUST_ORDER_ID varchar(15), 
    @ORDER_LINE_SUMMARY VARCHAR(MAX), 
    @TRIP_ORDER VARCHAR(3), 
    @PROMISE_DEL_DATE DATETIME, 
    @JOB_DEL_NOTES varchar(80), 
    @ORDER_DEL_NOTES VARCHAR(80) 

AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    -- update cust_adress with job delivery notes 

    UPDATE CUST_ADDRESS 
    SET USER_4 = @JOB_DEL_NOTES 
    FROM   dbo.CUSTOMER_ORDER INNER JOIN 
         dbo.CUST_ADDRESS ON dbo.CUSTOMER_ORDER.CUSTOMER_ID = dbo.CUST_ADDRESS.CUSTOMER_ID AND 
         dbo.CUSTOMER_ORDER.SHIPTO_ID = dbo.CUST_ADDRESS.SHIPTO_ID 
    WHERE  (dbo.CUSTOMER_ORDER.ID = @CUST_ORDER_ID) 

    -- update customer_order with order delivery notes 

    UPDATE CUSTOMER_ORDER 
    SET USER_5 = @ORDER_DEL_NOTES 
    WHERE ID = @CUST_ORDER_ID 

    -- update cust_order_line with trip_order information 

    IF @ORDER_LINE_SUMMARY = 'ALL LINES' 
     BEGIN 
     UPDATE CUST_ORDER_LINE 
     SET USER_4 = @TRIP_ORDER 
     WHERE CUST_ORDER_ID = @CUST_ORDER_ID 
     END 
    ELSE -- ONLY SPECIFIC LINES OF ORDER GET UPDATED 
     BEGIN 
     UPDATE CUST_ORDER_LINE 
     SET USER_4 = @TRIP_ORDER 
     WHERE CUST_ORDER_ID = @CUST_ORDER_ID AND PROMISE_DEL_DATE = @PROMISE_DEL_DATE 
     END 
+0

修复您的标题它是非常有吸引力 – Will

+0

我不认为我可以。 – redhook99

+0

什么,你不能[编辑]你自己的问题?令人震惊! – Will

回答

0

我想通了,主要的问题。使用Sql Server Profile我可以看到只有绑定字段才传递给存储过程。其他值为空。我为其余参数创建了ItemTemplates。

相关问题