Gridview SqlDataSource;从下拉列表

时间:2017-11-13 13:22:58

标签: c# asp.net gridview sqldatasource

我有一个用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>

但它并没有像我预期的那样真正发挥作用。我觉得我越来越接近,但不知道为什么它会像这样。

0 个答案:

没有答案