gpt4 book ai didi

asp.net - 如何将 Gridview 中的 DropDownList 与不是来自 gridview 的数据绑定(bind)

转载 作者:行者123 更新时间:2023-12-02 15:24:10 28 4
gpt4 key购买 nike

获得答案的一半在于知道如何提出问题。我不确定我是否做得很好,但这是我最好的机会。

我正在尝试将 ddl 与 gridview 内的数据绑定(bind),该数据不是来自 gridview 本身。这是在 EditItemTemplate 内。这样做的目的是为用户提供一个选定的值以及来自查找存储过程的一系列其他值。

我会在这里提到,我之前已经成功地完成了此操作,但使用的是 ObjectDataSource。这次我试图避免这种情况,暂时完全从后面的代码中完成,然后将其移至数据层。

这是我到目前为止所拥有的......

<asp:GridView ID="usersGrid" runat="server"                 
DataKeyNames="userID"
AutoGenerateColumns="false" Width="580"
OnRowUpdating="usersGrid_RowUpdating"
OnRowEditing="usersGrid_RowEditing"
OnRowCancelingEdit="usersGrid_RowCancelingEdit" OnRowDeleting="usersGrid_RowDeleting"
>

...

<EditItemTemplate>
<div class="gridName">
<asp:TextBox ID="txtFirstName" Text='<%#Eval("firstName") %>' runat="server" Width="95" />
</div>
<div class="gridName">
<asp:TextBox ID="txtLastName" Text='<%#Eval("lastName") %>' runat="server" Width="95" />
</div>
<div class="gridEmail">
<asp:TextBox ID="txtEmail" Text='<%#Eval("email") %>' runat="server" Width="245" />
</div>
<div class="gridName">
<asp:DropDownList ID="ddl_GetLists"
DataSourceID="GetListData()"
AppendDataBoundItems="true"
DataValueField="listID"
DataTextField="listName"
SelectedValue='<%#Bind("listID") %>'
runat="server"
>
</asp:DropDownList>
</div>
</EditItemTemplate>

...

Protected Sub usersGrid_RowEditing(ByVal sender As Object, ByVal e As GridViewEditEventArgs)
usersGrid.EditIndex = e.NewEditIndex
BindData()

End Sub

...

Private Sub BindData()
Dim conn As New SqlConnection(connectionString)
Dim ad As New SqlDataAdapter("MAINT_DIST_GET_USERS", conn)
Dim ds As New DataSet()
ad.Fill(ds)
GetListData()
usersGrid.DataSource = ds
usersGrid.DataBind()

End Sub

我包括了最后两种以及我尝试过但失败的其他方法。

...

    Protected Sub usersGrid_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
If e.Row.RowState = DataControlRowState.Edit Then
Dim ddl As DropDownList = DirectCast(e.Row.FindControl("ddl_GetLists"), DropDownList)

Dim conn As New SqlConnection(connectionString)
Dim ad As New SqlDataAdapter("MAINT_DIST_GET_LISTS", conn)
Dim ds As New DataSet()
ad.Fill(ds)

ddl.DataSource = ds
ddl.DataBind()
End If
End Sub

Public Function BindDropdown() As DataSet
Dim conn As New SqlConnection(connectionString)
Dim ad As New SqlDataAdapter("MAINT_DIST_GET_LISTS", conn)
Dim ds As New DataSet()
ad.Fill(ds)

ddl_GetLists.DataSource = ds
ddl_GetLists.DataBind()
End Function

我还会问为什么在最终函数中,为什么控件 ddl_GetLists 也无法被识别?在网格内部,它从设计者那里消失,但在网格外部,它又重新出现。

感谢大家的帮助。

最佳答案

您有几个选择。您可以使用数据源控件,也可以在 GridView 的 RowDataBound 事件的代码隐藏中绑定(bind)下拉列表。

我也注意到您的代码中存在一些问题。在您的示例中,您错误地分配了 DataSourceIDDataSourceID 应指向页面上数据源控件的 ID:

<asp:DropDownList ID="ddl_GetLists"     
DataSourceID="SqlDataSource1"
AppendDataBoundItems="true"
DataValueField="listID"
DataTextField="listName"
SelectedValue='<%#Bind("listID") %>'
runat="server">
</asp:DropDownList>

<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
SelectCommand="SELECT listID, listName FROM SomeTable">
</asp:SqlDataSource>

如果您想在代码隐藏中进行绑定(bind),可以通过 RowDataBound 事件来完成:

Protected Sub GridView1_RowDataBound(sender As Object, e As GridViewRowEventArgs)
If e.Row.RowType = DataControlRowType.DataRow AndAlso (e.Row.RowState And DataControlRowState.Edit) = DataControlRowState.Edit Then
Dim ddl As DropDownList = TryCast(e.Row.FindControl("ddl_GetLists"), DropDownList)
If ddl IsNot Nothing Then
ddl.DataSource = RetrieveDataSource()
ddl.DataBind()
End If
End If
End Sub

关于asp.net - 如何将 Gridview 中的 DropDownList 与不是来自 gridview 的数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8152925/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com