2009-12-16 45 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