【问题标题】:C# ASP.NET - Cannot update data through GridViewC# ASP.NET - 无法通过 GridView 更新数据
【发布时间】:2012-01-19 17:19:37
【问题描述】:

我有两张表,分别称为公司和客户。 Company 是基表,它有两列:CompanyID 和 Companyname。并且客户表具有 comapnyID 作为外键。

我使用网格视图来显示所有的 customerID、CustName、CustAddress 和 companyID。为了更新 companyID 字段,在网格视图中,我使用了一个下拉列表,其中显示了所有可用的 companyID,用户可以从中选择一个可用的 companyID。

但问题是我尝试通过从下拉列表中选择一个 companyID 并单击更新来使用新的 companyID 更新特定客户。一切正常,但是,在更新的客户记录中,对于 companyID 字段,它显示 NULL 值而不是新分配的 companyID 值。

我该如何解决这个问题?

这是VS2010自动生成的代码:

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="CustID" 
DataSourceID="SqlDataSource1">
<Columns>
<asp:CommandField ShowDeleteButton="True" ShowEditButton="True" 
ShowSelectButton="True" />
<asp:BoundField DataField="CustID" HeaderText="CustID" InsertVisible="False" 
ReadOnly="True" SortExpression="CustID" />
<asp:TemplateField HeaderText="CompanyID" SortExpression="CompanyID">
<EditItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" 
DataSourceID="SqlDataSource1" DataTextField="CompanyName" 
DataValueField="CompanyID">
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
ConnectionString="<%$ ConnectionStrings:ICT_IdealComputerConnectionString %>" 
SelectCommand="SELECT [CompanyID], [CompanyName] FROM [Company]">
</asp:SqlDataSource>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("CompanyID") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="FirstName" HeaderText="FirstName" 
SortExpression="FirstName" />
<asp:BoundField DataField="LastName" HeaderText="LastName" 
SortExpression="LastName" />
<asp:BoundField DataField="Address" HeaderText="Address" 
SortExpression="Address" />
<asp:BoundField DataField="Email" HeaderText="Email" SortExpression="Email" />
</Columns>
</asp:GridView>

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
 ConnectionString="<%$ ConnectionStrings:sas %>" 

 DeleteCommand="DELETE FROM [Customer] WHERE [CustID] = @CustID" 
 InsertCommand="INSERT INTO [Customer] ([CompanyID], [FirstName], [LastName],      
 [Address], [Email]) VALUES (@CompanyID, @FirstName, @LastName, @Address, @Email)" 

 SelectCommand="SELECT [CustID], [CompanyID], [FirstName], [LastName], [Address], 
 [Email] FROM [Customer]" 

 UpdateCommand="UPDATE [Customer] SET [CompanyID] = @CompanyID, [FirstName] =    
 @FirstName, [LastName] = @LastName, [Address] = @Address, [Email] = @Email WHERE 
 [CustID] = @CustID">

 <DeleteParameters>
 <asp:Parameter Name="CustID" Type="Int32" />
 </DeleteParameters>

 <InsertParameters>
 <asp:Parameter Name="CompanyID" Type="Int32" />
 <asp:Parameter Name="FirstName" Type="String" />
 <asp:Parameter Name="LastName" Type="String" />
 <asp:Parameter Name="Address" Type="String" />
 <asp:Parameter Name="Email" Type="String" />
 </InsertParameters>

 <UpdateParameters>
 <asp:Parameter Name="CompanyID" Type="Int32" />
 <asp:Parameter Name="FirstName" Type="String" />
 <asp:Parameter Name="LastName" Type="String" />
 <asp:Parameter Name="Address" Type="String" />
 <asp:Parameter Name="Email" Type="String" />
 <asp:Parameter Name="CustID" Type="Int32" />
 </UpdateParameters>

 </asp:SqlDataSource>

【问题讨论】:

  • 您能从 .aspx 发布网格的标记以及您拥有的任何代码吗?
  • 我贴了自动生成的代码,请看。

标签: asp.net sql-server database gridview


【解决方案1】:

变化:

<EditItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" 
DataSourceID="SqlDataSource1" DataTextField="CompanyName" 
DataValueField="CompanyID">
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
ConnectionString="<%$ ConnectionStrings:ICT_IdealComputerConnectionString %>" 
SelectCommand="SELECT [CompanyID], [CompanyName] FROM [Company]">
</asp:SqlDataSource>
</EditItemTemplate>

收件人:

<EditItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server" 
DataSourceID="SqlDataSource1" DataTextField="CompanyName" 
DataValueField="CompanyID" SelectedValue='<%# Bind("CompanyID") %>'>
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
ConnectionString="<%$ ConnectionStrings:ICT_IdealComputerConnectionString %>" 
SelectCommand="SELECT [CompanyID], [CompanyName] FROM [Company]">
</asp:SqlDataSource>
</EditItemTemplate>

这是walkthrough of using a dropdown list to edit的链接

【讨论】:

    【解决方案2】:

    UpdateParameters尝试替换

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

    <asp:ControlParameter Name="CompanyID" 
         ControlID="DropDownList1" PropertyName="SelectedValue" />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-06
      • 1970-01-01
      • 2018-09-20
      • 1970-01-01
      • 2016-06-12
      • 1970-01-01
      相关资源
      最近更新 更多