Tôi đang cố gắng để có được một NET 3.5 GridView để hiển thị một giá trị được lựa chọn như chuỗi khi được hiển thị, và để hiển thị một DropDownList cho phép tôi chọn một giá trị từ một danh sách các tùy chọn khi được chỉnh sửa. Có vẻ đơn giản đủ?Chỉnh sửa hàng Gridview - liên kết động với một DropDownList
GridView của tôi trông như thế này (giản thể):
<asp:GridView ID="grvSecondaryLocations" runat="server"
DataKeyNames="ID" OnInit="grvSecondaryLocations_Init"
OnRowCommand="grvSecondaryLocations_RowCommand"
OnRowCancelingEdit="grvSecondaryLocations_RowCancelingEdit"
OnRowDeleting="grvSecondaryLocations_RowDeleting"
OnRowEditing="grvSecondaryLocations_RowEditing"
OnRowUpdating="grvSecondaryLocations_RowUpdating" >
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="lblPbxTypeCaption" runat="server"
Text='<%# Eval("PBXTypeCaptionValue") %>' />
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="ddlPBXTypeNS" runat="server"
Width="200px"
DataTextField="CaptionValue"
DataValueField="OID" />
</EditItemTemplate>
</asp:TemplateField>
</asp:GridView>
Lưới được hiển thị OK khi không ở chế độ chỉnh sửa - loại PBX chọn cho thấy giá trị của nó trong asp: Label. Không có gì ngạc nhiên.
Tôi tải danh sách các giá trị cho DropDownList vào một thành viên địa phương được gọi là _pbxTypes
trong sự kiện OnLoad
của biểu mẫu. Tôi đã xác minh điều này - nó hoạt động, các giá trị ở đó.
Bây giờ thử thách của tôi là: khi lưới chuyển sang chế độ chỉnh sửa cho một hàng cụ thể, tôi cần phải liên kết danh sách các PBX được lưu trữ trong _pbxTypes
.
đơn giản đủ, tôi nghĩ - chỉ cần lấy thả xuống đối tượng danh sách trong trường hợp RowEditing
và đính kèm danh sách:
protected void grvSecondaryLocations_RowEditing(object sender, GridViewEditEventArgs e)
{
grvSecondaryLocations.EditIndex = e.NewEditIndex;
GridViewRow editingRow = grvSecondaryLocations.Rows[e.NewEditIndex];
DropDownList ddlPbx = (editingRow.FindControl("ddlPBXTypeNS") as DropDownList);
if (ddlPbx != null)
{
ddlPbx.DataSource = _pbxTypes;
ddlPbx.DataBind();
}
.... (more stuff)
}
Rắc rối là - Tôi không bao giờ có được bất cứ điều gì trở lại từ FindControl
cuộc gọi - có vẻ như ddlPBXTypeNS
không tồn tại (hoặc không thể tìm thấy).
Tôi đang thiếu gì ?? Phải là một cái gì đó thực sự ngu ngốc .... nhưng cho đến nay, tất cả Googling của tôi, đọc lên trên điều khiển GridView, và yêu cầu bạn bè đã không giúp đỡ.
Ai có thể phát hiện liên kết bị thiếu? ;-)
Tricky .... Tôi nhận được sự kiện này, nhưng RowState là "Alternate | Edit" - vì vậy IF của bạn không bao giờ đúng :-) –
OK, tôi đã thay đổi nếu bạn kiểm tra bit "Chỉnh sửa" đang được đặt (bỏ qua bất kỳ bit khác có thể được thiết lập) và bây giờ nó hoạt động như một say mê! Cảm ơn một đống !! –
chỉ cần thay đổi mã :) – balexandre