2011-06-29 25 views
0

這很有趣,因爲我在2個不同的項目中使用相同的代碼結構,其中一個工作正常,但另一個甚至不會執行。Gridview不執行UpdateCommand

這裏是asp.net代碼(BulkEditGridview是使用gridview的作爲基礎控制擴展控制所以它基本上以同樣的方式)

<cc1:BulkEditGridView ID="BulkEditGridView1" runat="server" DataKeyNames="id" 
    AutoGenerateColumns="False" BackColor="White" BorderColor="#CCCCCC" 
    BorderStyle="None" BorderWidth="1px" CellPadding="3" 
    DataSourceID="titlesSqlDataSource" EnableInsert="False" 
    EnableModelValidation="True" SaveButtonID="Button1"> 
<Columns> 
    <asp:BoundField DataField="title" HeaderText="Title" SortExpression="title" /> 
    <asp:BoundField DataField="siteid" HeaderText="SiteID" ReadOnly="True" 
     SortExpression="siteid" /> 
    <asp:BoundField DataField="block" HeaderText="Block" SortExpression="block" > 
    <ControlStyle Width="50px" /> 
    <HeaderStyle Width="50px" /> 
    <ItemStyle Width="50px" /> 
    </asp:BoundField> 
</Columns> 
<FooterStyle BackColor="White" ForeColor="#000066" /> 
<HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" /> 
<PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" /> 
<RowStyle ForeColor="#000066" /> 
<SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" /> 

Button1的回傳,甚至執行BulkEditGridView1.Save ();

這裏是數據源和按鈕的代碼:

<asp:SqlDataSource ID="titlesSqlDataSource" runat="server" 
    ConnectionString="<%$ ConnectionStrings:xxxx %>" 
    SelectCommand="sp_getBottomLinksTitles" SelectCommandType="StoredProcedure" 
    UpdateCommand="sp_updateBlockTitle" UpdateCommandType="StoredProcedure"> 
    <SelectParameters> 
     <asp:SessionParameter DefaultValue="1" Name="siteid" SessionField="siteid" 
      Type="Int32" /> 
    </SelectParameters> 
    <UpdateParameters> 
    <asp:Parameter Name="title" Type=String /> 
    <asp:Parameter Name="id" Type=Int32 /> 
    <asp:Parameter Name="block" Type=Int32 /> 
    </UpdateParameters> 
</asp:SqlDataSource> 
<asp:Button ID="Button1" runat="server" Text="Save" onclick="Button1_Click" /> 

該代碼是一個沒有工作,但是這一個工程就像一個魅力:

<cc1:BulkEditGridView ID="GridViewExistingInvoices" SaveButtonID="AcceptButton" DataKeyNames=id runat="server" DataSourceID="InvoicesSqlDatasource" Font-Bold="False" AutoGenerateColumns="False" BackColor="White" BorderColor="#999999" BorderStyle="Solid" BorderWidth="1px" CellPadding="3" ForeColor="Black" GridLines="Vertical" Width="915px" AllowSorting="True"> 
      <FooterStyle BackColor="#CCCCCC" /> 
      <EmptyDataTemplate> No Invoices to make</EmptyDataTemplate> 

      <Columns> 
       <asp:BoundField DataField="date" ItemStyle-Font-Size="11px" HeaderText="Invoice Date" SortExpression="date" DataFormatString="{0:dd-MMM-yyyy}" ItemStyle-VerticalAlign="Top"> 
        <HeaderStyle Width="80px" /> 
        <ItemStyle Width="80px" Font-Size="11px"/> 
         <ControlStyle Width="80px" Font-Size="11px" /> 
       </asp:BoundField> 
      <asp:TemplateField HeaderText="Amount"> 
      <ItemTemplate> 
       <asp:TextBox Text='<%# Bind("Amount1") %>' Font-Size="11px" Width="60px" runat=server ID="amount"> 
        </asp:TextBox><br/> 
         <asp:TextBox Text='<%# Bind("Amount2") %>' Font-Size="11px" Width="60px" runat=server ID="TextBox1"> 
        </asp:TextBox><br/> 
         <asp:TextBox Text='<%# Bind("Amount3") %>' Font-Size="11px" Width="60px" runat=server ID="TextBox2"> 
        </asp:TextBox><br/>      

      </ItemTemplate>    
      </asp:TemplateField> 
        <asp:TemplateField HeaderText="Payment Due"> 
      <ItemTemplate> 
       <asp:TextBox Text='<%# Bind("payment_Due") %>' Font-Size="11px" Width="70px" runat=server ID="tdue1"> 
        </asp:TextBox><br/> 
         <asp:TextBox Text='<%# Bind("due2") %>' Font-Size="11px" Width="70px" runat=server ID="tdue2"> 
        </asp:TextBox><br/> 
         <asp:TextBox Text='<%# Bind("due3") %>' Font-Size="11px" Width="70px" runat=server ID="tdue3"> 
        </asp:TextBox><br/>     

      </ItemTemplate>    
      </asp:TemplateField> 
      <asp:BoundField DataField="Amount" ItemStyle-Font-Size="11px" HeaderText="Total Amount" SortExpression="Amount" DataFormatString="{0:c}" ItemStyle-VerticalAlign="Top" > 
        <HeaderStyle Width="60px" /> 
        <ItemStyle Width="60px" Font-Size="11px"/> 
         <ControlStyle Width="60px" Font-Size="11px" /> 
       </asp:BoundField> 
      <asp:BoundField DataField="T" HeaderText="T" ItemStyle-Font-Size="11px" SortExpression="T" ItemStyle-VerticalAlign="Top"> 
        <HeaderStyle Width="25px" /> 
        <ItemStyle Width="25px" Font-Size="11px"/> 
        <ControlStyle Width="40px" Font-Size="11px"/> 
       </asp:BoundField>     
       <asp:TemplateField HeaderText="Invoice Description"> 
       <ItemTemplate> 
       <asp:TextBox Text='<%# Bind("Description") %>' Font-Size="11px" Width="200px" TextMode=MultiLine Height=50px runat=server ID="tDescription"> 
        </asp:TextBox> 
      </ItemTemplate>    
      </asp:TemplateField>     
        <asp:TemplateField HeaderText="Comments"> 
       <ItemTemplate> 
       <asp:TextBox Text='<%# Bind("Comments") %>' Font-Size="11px" Width="190px" TextMode=MultiLine Height=50px runat=server ID="tComments"> 
        </asp:TextBox> 
      </ItemTemplate>    
      </asp:TemplateField>      
       <asp:CheckBoxField DataField="isblack" ItemStyle-Font-Size="11px" HeaderText="B" SortExpression="isblack" > 
        <HeaderStyle Width="20px" /> 
       </asp:CheckBoxField> 
       <asp:CheckBoxField DataField="plusiva" ItemStyle-Font-Size="11px" HeaderText="+IVA" SortExpression="plusiva" > 
        <HeaderStyle Width="20px" /> 
       </asp:CheckBoxField> 
       <asp:HyperLinkField DataNavigateUrlFields="url" ItemStyle-Font-Size="11px" HeaderText="Print" Text="Print" > 
        <HeaderStyle HorizontalAlign="Left" Width="50px" /> 
       </asp:HyperLinkField>      
       <asp:HyperLinkField DataNavigateUrlFields="urlDeleteP" ItemStyle-Font-Size="11px" Text="Delete" /> 
      </Columns> 
      <PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" /> 
      <SelectedRowStyle BackColor="#000099" Font-Bold="True" ForeColor="White" /> 
      <HeaderStyle BackColor="Black" Font-Bold="True" ForeColor="White" /> 
      <AlternatingRowStyle BackColor="#CCCCCC" /> 
     </cc1:BulkEditGridView> 

     <asp:SqlDataSource ID="InvoicesSqlDatasource" runat="server" ConnectionString="<%$ ConnectionStrings:xxxConnectionString %>" 
     SelectCommand="SELECT payment.id,'Not assigned' id1,plusiva,payment.id, payment.[date],CAST([totalAmount] as decimal(10,2)) as amount,amount as amount1,amount2,amount3,due2,due3, [payment_due], payment.[comments],paymentform AS T , [isblack],'view_invoice.aspx?id='+cast(payment.id as nvarchar(10)) as url,&#13;&#10;'delete_preInvoice.aspx?id='+cast(payment.id as nvarchar(10)) as urlDeleteP&#13;&#10;, Description FROM [payment],lead WHERE (payment.clientid = @id AND payment.clientid=lead.id AND invoiceId is null) ORDER BY [date]" 
     UpdateCommand="sp_updateInvoiceN" UpdateCommandType=StoredProcedure> 
      <SelectParameters> 
       <asp:QueryStringParameter DefaultValue="1" Name="id" QueryStringField="id" Type="Int32" /> 
      </SelectParameters> 
      <UpdateParameters> 
       <asp:Parameter Name="date" Type=DateTime/> 
       <asp:Parameter Name="payment_due" Type=DateTime/> 
       <asp:Parameter Name="comments" type=String /> 
       <asp:Parameter Name="Description" type=String /> 
       <asp:Parameter Name="amount" type=Double /> 
       <asp:Parameter Name="id" type=String />     
       <asp:Parameter Name="isBlack" type=Boolean />     
       <asp:Parameter Name="plusiva" type=Boolean /> 
       <asp:Parameter Name="due2" Type=DateTime/> 
       <asp:Parameter Name="due3" Type=DateTime/> 
       <asp:Parameter Name="amount2" type=Double /> 
       <asp:Parameter Name="amount3" type=Double /> 
       <asp:Parameter Name="amount1" type=Double /> 
      </UpdateParameters>     
     </asp:SqlDataSource> 

的結構是一樣的,使用相同的控制,相同的更新方式,Datakeynames都存在於兩者中,都在按鈕單擊事件上執行相同的事情,這有點奇怪,使用sql server profiler我可以看到它執行updatecommand並測試Sql存儲過程服務器管理工​​作室它工作正常。

它不是一個連接問題,或者是因爲selectCommand起作用,並且它從數據庫加載信息。

任何想法??

回答

0

不知道,如果是相關的,這是一個有點怪,但你必須在字符串類型的工作代碼編號:

<asp:Parameter Name="id" type=String />  
在不工作的一個

同時你

<asp:Parameter Name="id" Type=Int32 /> 

如果你真的在BulkEditGridView1.Save()中使用相同的代碼,方法,理論上可能會造成麻煩。

+0

好眼,但沒有工作,它沒有拋出一個錯誤,甚至沒有嘗試執行存儲過程! – George

0

我認爲這個問題是由於你的按鈕上有一個自定義事件而引起的。

onclick="Button1_Click" 

框架將開始尋找該事件,並會認爲你會處理自己保存。

但爲什麼你在那裏有一個保存按鈕?您可以使用gridview控件中內置的按鈕。您可以激活屬性或嚮導中的編輯選項。

因爲如果你想使用你自己的控件,那麼你將需要在每一行上有一個,所以你將需要添加一個templaterow並在那裏添加按鈕。


那麼我認爲這是正常的,什麼都沒有發生。你使用gridview將它鏈接到按鈕的屬性是在按鈕處於你想要的gridview中時使用的。

現在,我知道你在找什麼,我建議你看看這個教程。它討論了你試圖完成的同樣的事情。 Link

+0

好吧,我得到了onclick事件的C#代碼,把它關掉仍然是一樣的,它就像沒有發生,但是Button_click實際上是執行,只是爲了嘗試我添加Response.Write(「EXECUTED」);到代碼並且它在頁面上運行並打印出來,所以它運行,但Save()方法沒有做任何事情。 – George

+0

我使用這個特殊控件進行批量編輯,我需要同時編輯所有行中的所有信息,並在頁面上同時編輯另一個信息,只需單擊一個按鈕。這就是爲什麼我不使用gridview的正常編輯/更新按鈕 – George

+0

希望這是你正在尋找 – Beejee