我有一个用sqldatasource填充的gridview。 gridview的一列是一个templatefield,它包含一个标签作为ItemTemplate,但在EditItemTemplate中我有一个下拉列表,而不是一个文本框。我希望能够通过从可能值列表中进行选择来编辑某列的值。 所以我创建了第二个sqldatasource,以便从数据库中提取值。我限制了2平方英尺的资源。视觉上没问题。当我点击编辑时,下拉列表会显示我想要的值。当我选择其中一个值并单击更新时,我收到错误" 输入字符串的格式不正确。"我想我知道为什么会这样。可能来自下拉列表的值是类型字符串,我需要的是整数,因为这是此列的类型。我已经尝试将UpdateParameter设置为Int32类型,但没有运气。有没有办法做到这一点?
这是我使用的代码,但是我已经使用" Column_1"," Column_2"等更改了列名称。在此示例中," Column_6&#34 ;是编辑中带有下拉列表的模板字段。
<asp:GridView ID="DataUploadGridView" runat="server" AutoGenerateColumns="False" DataSourceID="First_DB" DataKeyNames="Column_3" >
<RowStyle HorizontalAlign="Center" />
<Columns>
<asp:BoundField DataField="Column_1" HeaderText="Column 1"/>
<asp:BoundField DataField="Column_2" HeaderText="Column 2"/>
<asp:BoundField DataField="Column_3" HeaderText="Column 3"/>
<asp:BoundField DataField="Column_4" HeaderText="Column 4"/>
<asp:BoundField DataField="Column_5" HeaderText="Column 5"/>
<asp:TemplateField HeaderText="Column 6">
<EditItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="Second_DB" DataTextField="Column_6_Description" DataValueField="Column_6_ID"/>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("Column_6_ID") %>'/>
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField ShowEditButton="true" HeaderText="Edit" />
<asp:CommandField ShowDeleteButton="true" HeaderText="Delete" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="First_DB" runat="server" ConnectionString="<%$ ConnectionStrings:MyConnectionString %>" OnSelecting="First_DB_Selecting" OnSelected="First_DB_Selected" OnInserted="First_DB_Inserted" OnInserting="First_DB_Inserting" OnDeleting="First_DB_Deleting" OnUpdating="First_DB_Updating"
SelectCommand ="SELECT * FROM [tblFirst_DB]
UpdateCommand ="UPDATE [tblFirst_DB]
SET [Column_1] = @Column_1,
[Column_2] = @Column_2,
[Column_3] = @Column_3,
[Column_4] = @Column_4,
[Column_5] = @Column_5,
[Column_6] = @Column_6
WHERE [Column_3] = @Column_3"
DeleteCommand ="DELETE FROM [tblFirst_DB] WHERE [Column_3] = @Column_3"
<UpdateParameters>
<asp:Parameter Name="Column_1" Type="String" />
<asp:Parameter Name="Column_2" Type="String" />
<asp:Parameter Name="Column_3" Type="String" />
<asp:Parameter Name="Column_4" Type="String" />
<asp:Parameter Name="Column_5" Type="Int32" />
<asp:Parameter Name="Column_6" Type="Int32" />
</UpdateParameters>
<DeleteParameters>
<asp:Parameter Name="Column_3" Type="String" />
</DeleteParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="Second_DB" runat="server" ConnectionString="<%$ ConnectionStrings:MyConnectionString %>" SelectCommand="SELECT [Column_6_ID], [Column_6_Description] FROM [tblSecond_DB]"></asp:SqlDataSource>
希望你还在这里。所以只是回顾一下这个问题。我得到了一个&#34; 输入字符串的格式不正确。 &#34;错误,因为我需要Column_6参数为整数,并且值来自下拉列表,这可能使每个值成为字符串。
我可以做什么,以便Column_6的值在更新时保持为int? 现在唯一想到的是以某种方式从代码中传递参数。当我选择下拉列表值时,我应该触发OnSelectedIndexChanged事件。我在这里想的是我应该将Selected_ID强制转换为整数,并以某种方式将其输入到第一个sqldatasource中。但是该值将进入标签,以便再次将其转换为字符串。所以没有用......我真的坚持这个。欢迎任何帮助。
谢谢!
更新:我注意到如果删除除Column_6中的所有UpdateParame之外的所有UpdateParame,我就不会再收到错误了。但是,该值不会出现在gridview中。它是一个空单元格。我查看了数据库,它是空的。 我认为它是null,因为在UpdateParameters中我现在有:
<UpdateParameters>
<asp:Parameter Name="Column_6" Type="Int32" />
</UpdateParameters>
它没有从任何地方获得价值。它应该从Second_DB sqldatasource获取它。我尝试将其更改为:
<UpdateParameters>
<asp:ControlParameter Name="Column_6" ControlID="Second_DB" Type="Int32" />
</UpdateParameters>
但它并没有像我预期的那样真正发挥作用。我觉得我越来越接近,但不知道为什么它会像这样。