2009-12-16 49 views
0

我有一個簡單的gridview(它現在)它填充,我可以編輯它。但是當涉及到更新時,我只是無法讓它工作。更新gridview總是返回空參數

下面的代碼創建一個GridView其搜索用戶的名稱以「C」開頭的(我的濾波部分那我剝離出來)

問題是,當我點擊更新按鈕不會更新。存儲過程被調用,但傳遞給它的所有參數都爲null。因此數據庫不會更新。

我知道它是一個簡單的問題,但我只是看不到它。

我嘗試在onupdating事件中使用ExtractValuesFromCell,但仍然只有空值。我不得不添加CausesValidation="false",因爲沒有它,更新事件甚至沒有被調用。

任何和所有幫助表示讚賞

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
    AutoGenerateColumns="False" DataSourceID="SqlDataSource3" 
    DataKeyNames="UserId"> 
    <Columns> 
     <asp:CommandField ShowEditButton="True" CausesValidation="false" /> 
     <asp:BoundField DataField="UserName" HeaderText="UserName" 
      SortExpression="UserName" /> 
     <asp:BoundField DataField="MobileAlias" HeaderText="MobileAlias" 
      SortExpression="MobileAlias" /> 
     <asp:BoundField DataField="DistrictId" HeaderText="DistrictId" 
      SortExpression="DistrictId" /> 
     <asp:BoundField ReadOnly="true" DataField="UserId" HeaderText="UserId" 
      SortExpression="UserId" /> 
    </Columns> 
</asp:GridView> <asp:SqlDataSource ID="SqlDataSource3" runat="server" 
    ConnectionString="<%$ ConnectionStrings:REMConnectionString_development_dev %>" 
    SelectCommand="LoadUser" SelectCommandType="StoredProcedure" 
    UpdateCommand="UpdateUser" UpdateCommandType="StoredProcedure" 
    onupdating="SqlDataSource3_Updating"> 
    <SelectParameters> 
     <asp:Parameter DefaultValue="c" Name="UserName" Type="String" /> 
    </SelectParameters> 
    <UpdateParameters> 
     <asp:Parameter Name="UserId" Type="String" /> 
     <asp:Parameter Name="DistrictID" Type="Int32" /> 
     <asp:Parameter Name="UserName" Type="String" /> 
     <asp:Parameter Name="MobileAlias" Type="String" /> 
    </UpdateParameters> 
</asp:SqlDataSource> 

在代碼隱藏唯一的代碼是

protected void SqlDataSource3_Updating(object sender, SqlDataSourceCommandEventArgs e) 
{ 
} 

正是在那裏,所以我可以在一個斷點下降,檢查參數,這都在那裏但空值

+0

您可以發佈您更新的存儲過程 – 2009-12-16 12:56:58

+0

內容看看本教程中,也許你已經錯過了一些東西: http://www.asp.net/(S(pdfrohu0ajmwt445fanvj2r3)) /learn/data-access/tutorial-49-vb.aspx – 2009-12-16 12:58:40

+0

謝謝託尼。我已經從該鏈接下載了樣本。這是一個很好的資源,我只希望早些時候發現它的一些設計決定可能會有所不同。 – DeveloperChris 2009-12-17 09:14:04

回答

0

好的,我有機會做更多的研究並確認了這個問題。

Page_load函數中設置主頁面ID是個問題。它需要在Page_Init中設置。

本頁面提供了一個很好的解釋
http://imar.spaanjaars.com/QuickDocId.aspx?quickdoc=469

所以從Page_Load中移動 ID= "REM";Page_init問題奇蹟般地走了。

不幸的是,建議在Page_Load中設置ID是很常見的,這是我所依賴的,並且結果是不好的建議。

DC

0

還有其他的東西必須在這裏工作。我複製了你提供的代碼,當我分解事件參數時,我看到了這些值並且它們都能正常工作。你能編輯你的文章幷包含所有的代碼嗎?

+0

你是對的,我找到了問題的原因,但它引發了另一個問題。問題的原因是主頁面上的page_load方法中的這一行'ID =「REM」;'這是爲了使請求條目的名稱比ctl00更好,例如:ctl00 $ DistrictSelectorContent $ District在Request對象中更改爲REM $ DistrictSelectorContent $ District。沒有太大的改進,但在我的腦海裏,比默認更笨拙。爲什麼它打破了更新功能我不知道。顯然與視圖狀態有關。現在的問題是我如何實現'ID =「REM」'的替代方案? – DeveloperChris 2009-12-17 10:27:08