Một nửa trận chiến nhận câu trả lời là biết cách đặt câu hỏi. Tôi không chắc chắn tôi đang làm tốt công việc đó nhưng đây là bức ảnh đẹp nhất của tôi.Cách liên kết DropDownList trong Gridview với dữ liệu KHÔNG từ gridview
Tôi đang cố gắng liên kết ddl với dữ liệu bên trong chế độ xem lưới mà KHÔNG đến từ chính chế độ xem lưới. Đây là trong EditItemTemplate. Mục đích để làm như vậy là cung cấp cho người dùng, để bắt đầu, một giá trị đã chọn và một loạt các giá trị khác từ một thủ tục được lưu trữ tra cứu.
Tôi sẽ đề cập đến ở đây rằng tôi đã thực hiện thành công trước đây nhưng sử dụng ObjectDataSource. Tôi đang cố gắng để tránh điều đó thời gian này và làm điều đó hoàn toàn từ mã phía sau cho bây giờ sau đó di chuyển nó vào một lớp dữ liệu sau đó.
Dưới đây là những gì tôi có cho đến nay ...
<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
Tôi bao gồm cả hai lần cuối cùng cũng như các cách tiếp cận khác mà tôi đã thử và thất bại.
...
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
Tôi cũng sẽ hỏi tại sao, trong hàm chính thức, tại sao là kiểm soát, ddl_GetLists, không được coi là tốt? Bên trong lưới nó biến mất khỏi nhà thiết kế nhưng bên ngoài lưới nó lại xuất hiện.
Cảm ơn tất cả vì sự giúp đỡ của bạn.
tôi đã thực hiện thành công một cái gì đó tương tự như sau sử dụng một ObjectDataSource trong quá khứ nhưng tôi đang cố gắng để làm điều này độc quyền từ mã sau thời gian này. Điều này có thể không? –
Vâng, chắc chắn rồi. Hãy cho tôi một giây và tôi sẽ cập nhật câu trả lời của tôi. –
Về thuộc tính ConnectionStrings. Ứng dụng tôi đã được gán để nối thêm sử dụng một khóa trong appSettings thay vì thuộc tính connectionstring bình thường từ tệp cấu hình. Có cách nào để gọi nó từ sqldatasource? –