GridView中多个DropDownList的联动问题
2012-02-01 18:04
274 查看
先大致说下需求:
1.GridView中展示数据的同时可以编辑数据
2.一条数据的一些属性只能是一些特定的值,并且属性A是属性B的基础;具体的问题是为某个成员指定操作权限(这里用角色代替),需要指定操作范围和具体的组织;操作范围(属性A,简单点,当然有很多,这里仅说明问题)有两个 Team (隶属后者) Department;具体组织(哪些Team及Department)
3.在只读状态变为编辑状态时,需要保留原数据
4.在编辑状态下,选择范围后,后面的DropdownList加载这个范围的具体组织
代码及注释如下
由于本人JS水平实在有限,故全部使用类似ASP绑定数据
1.GridView中展示数据的同时可以编辑数据
2.一条数据的一些属性只能是一些特定的值,并且属性A是属性B的基础;具体的问题是为某个成员指定操作权限(这里用角色代替),需要指定操作范围和具体的组织;操作范围(属性A,简单点,当然有很多,这里仅说明问题)有两个 Team (隶属后者) Department;具体组织(哪些Team及Department)
3.在只读状态变为编辑状态时,需要保留原数据
4.在编辑状态下,选择范围后,后面的DropdownList加载这个范围的具体组织
代码及注释如下
<asp:GridView Width="800px" ID="GV_Detail" runat="server" AutoGenerateColumns="False" CellPadding="4" ForeColor="#333333" OnRowCancelingEdit="GV_Detail_RowCancelingEdit" OnRowCommand="GV_Detail_RowCommand" OnRowEditing="GV_Detail_RowEditing" OnRowUpdating="GV_Detail_RowUpdating" OnRowDeleting="GV_Detail_RowDeleting"> <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> <RowStyle BackColor="#EFF3FB" /> <Columns> <asp:TemplateField HeaderStyle-VerticalAlign="Middle" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" ItemStyle-VerticalAlign="Middle"> <HeaderTemplate> Action </HeaderTemplate> <ItemTemplate> <asp:LinkButton Text="<img src='../images/edit.gif' border=0>" CommandName="edit" CommandArgument='<%#Eval("MemberId") %>' runat="Server" ID="Linkbutton1" /> <asp:LinkButton Text="<img src='../images/delete.gif' border=0>" CommandName="delete" OnClientClick="javascript:return confirm('Are you sure you want to delete this?')" CommandArgument='<%#Eval("MemberId") %>' runat="Server" ID="Linkbutton4" /> </ItemTemplate> <EditItemTemplate> <asp:LinkButton Text="<img src='../images/update.gif' border=0>" CommandName="update" CommandArgument='<%#Eval("MemberId") %>' runat="Server" ID="Linkbutton2" /> <asp:LinkButton Text="<img src='../images/cancel.gif' border=0>" CommandName="cancel" CommandArgument='<%#Eval("MemberId") %>' runat="Server" ID="Linkbutton3" /> </EditItemTemplate> <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" /> <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" /> </asp:TemplateField> <asp:TemplateField HeaderText="Addible" HeaderStyle-VerticalAlign="Middle" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" ItemStyle-VerticalAlign="Middle"> <ItemTemplate> <asp:CheckBox ID="chk_Add" runat="server" Enabled="false" Checked='<%#Convert.ToBoolean(DataBinder.Eval(Container.DataItem, "Addible"))%>' /> </ItemTemplate> <EditItemTemplate> <asp:CheckBox ID="chk_EAdd" runat="server" Checked='<%#Convert.ToBoolean(DataBinder.Eval(Container.DataItem, "Addible"))%>' /> </EditItemTemplate> <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" /> <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" /> </asp:TemplateField> <asp:TemplateField HeaderText="Modify" HeaderStyle-VerticalAlign="Middle" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" ItemStyle-VerticalAlign="Middle"> <ItemTemplate> <asp:CheckBox ID="chk_Modify" runat="server" Enabled="false" Checked='<%#Convert.ToBoolean(DataBinder.Eval(Container.DataItem, "Modify"))%>' /> </ItemTemplate> <EditItemTemplate> <asp:CheckBox ID="chk_EModify" runat="server" Checked='<%#Convert.ToBoolean(DataBinder.Eval(Container.DataItem, "Modify"))%>' /> </EditItemTemplate> <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" /> <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" /> </asp:TemplateField> <asp:TemplateField HeaderText="Search" HeaderStyle-VerticalAlign="Middle" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" ItemStyle-VerticalAlign="Middle"> <ItemTemplate> <asp:CheckBox ID="chk_Search" runat="server" Enabled="false" Checked='<%#Convert.ToBoolean(DataBinder.Eval(Container.DataItem, "Search"))%>' /> </ItemTemplate> <EditItemTemplate> <asp:CheckBox ID="chk_ESearch" runat="server" Checked='<%#Convert.ToBoolean(DataBinder.Eval(Container.DataItem, "Search"))%>' /> </EditItemTemplate> <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" /> <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" /> </asp:TemplateField> <asp:TemplateField HeaderText="Statistics" HeaderStyle-VerticalAlign="Middle" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" ItemStyle-VerticalAlign="Middle"> <ItemTemplate> <asp:CheckBox ID="chk_Statistics" runat="server" Enabled="false" Checked='<%#Convert.ToBoolean(DataBinder.Eval(Container.DataItem, "Statistics"))%>' /> </ItemTemplate> <EditItemTemplate> <asp:CheckBox ID="chk_EStatistics" runat="server" Checked='<%#Convert.ToBoolean(DataBinder.Eval(Container.DataItem, "Statistics"))%>' /> </EditItemTemplate> <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" /> <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" /> </asp:TemplateField> <asp:TemplateField HeaderText="OrganizationLevel" HeaderStyle-VerticalAlign="Middle" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" ItemStyle-VerticalAlign="Middle"> <ItemTemplate> <asp:Label ID="lab_Level" runat="server" Text='<%#Eval("OrganizationLevel") %>'></asp:Label> </ItemTemplate> <EditItemTemplate> <asp:DropDownList runat="server" ID="drp_Level" SelectedValue='<%# GetCurLevel((DataBinder.Eval(Container.DataItem, "OrganizationLevel")).ToString())%>' OnSelectedIndexChanged="drp_Level_SelectIndexChanged" AutoPostBack="true" DataTextField="LevelName" DataValueField="LevelID" DataSource='<%#GetAllLevel() %>'> </asp:DropDownList> </EditItemTemplate> <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" /> <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" /> </asp:TemplateField> <asp:TemplateField HeaderText="OrganizationName" HeaderStyle-VerticalAlign="Middle" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" ItemStyle-VerticalAlign="Middle"> <ItemTemplate> <asp:Label ID="lab_ID" runat="server" Text='<%#GetOrganization(DataBinder.Eval(Container.DataItem, "OrganizationLevel").ToString(),DataBinder.Eval(Container.DataItem, "OrganizationID").ToString()) %>'></asp:Label> </ItemTemplate> <EditItemTemplate> <asp:DropDownList runat="server" ID="drp_Organization"> </asp:DropDownList> <asp:HiddenField ID="hdf_Organization" runat="server" Value='<%#Eval("OrganizationID") %>'/> </EditItemTemplate> <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" /> <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" /> </asp:TemplateField> </Columns> <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" /> <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" /> <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> <EditRowStyle BackColor="#2461BF" /> <AlternatingRowStyle BackColor="White" /> </asp:GridView>
由于本人JS水平实在有限,故全部使用类似ASP绑定数据
#region PublicMethod protected string GetOrganization(string level, string organizationID) { EnumOrganizational enumOrganization = (EnumOrganizational)Enum.Parse(typeof(EnumOrganizational), level); return new BLLRole_Attribute().GetOrganizationName(enumOrganization, organizationID); } protected DataTable GetAllLevel() { DataTable result = new DataTable(); DataColumn c1 = new DataColumn("LevelID"); DataColumn c2 = new DataColumn("LevelName"); result.Columns.Add(c1); result.Columns.Add(c2); DataRow r1 = result.NewRow(); r1["LevelID"] = 3; r1["LevelName"] = EnumOrganizational.Team; result.Rows.Add(r1); DataRow r2 = result.NewRow(); r2["LevelID"] = 2; r2["LevelName"] = EnumOrganizational.SubDepartment; result.Rows.Add(r2); DataRow r3 = result.NewRow(); r3["LevelID"] = 1; r3["LevelName"] = EnumOrganizational.Department; result.Rows.Add(r3); DataRow r4 = result.NewRow(); r4["LevelID"] = 0; r4["LevelName"] = EnumOrganizational.Company; result.Rows.Add(r4); //#region 根据层级绑定具体组织结构 //string a = (GV_Detail.DataSource as List<BORoleAttribute>)[GV_Detail.EditIndex].OrganizationID; //#endregion return result; } protected string GetCurLevel(string level) { EnumOrganizational enumOrganization = (EnumOrganizational)Enum.Parse(typeof(EnumOrganizational), level); return Convert.ToInt32(enumOrganization).ToString(); } protected List<ItemList<string, string>> GetAllOrganization(string level) { EnumOrganizational enumOrganization = (EnumOrganizational)Enum.Parse(typeof(EnumOrganizational), level); return new BLLRole_Attribute().GetAllOrganizationByLevel(enumOrganization); } #endregion protected void GV_Detail_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) { GV_Detail.EditIndex = -1; bdDetail(string.Empty); } protected void GV_Detail_RowCommand(object sender, GridViewCommandEventArgs e) { string MemberID = e.CommandArgument.ToString(); switch (e.CommandName) { case "edit": break; case "cancel": break; case "update": //更新操作 GV_Detail.EditIndex = -1; bdDetail(string.Empty); break; case "delete": //删除操作 break; } } protected void GV_Detail_RowUpdating(object sender, GridViewUpdateEventArgs e) { } protected void GV_Detail_RowEditing(object sender, GridViewEditEventArgs e) { GV_Detail.EditIndex = e.NewEditIndex; bdDetail(string.Empty); #region 此处用于根据选择的组织结构层次来加载对应具体的组织结构(并且选定原数据),写到此处的目的 不得已而为之 //因为属于级联相关的,既后面的DropDownList是根据前面的DropDownList的当前选择项来加载数据, //此处代码的主要目的是:用户点击了编辑按钮后,这些可编辑项是这条数据的初始值 GridViewRow row = GV_Detail.Rows[GV_Detail.EditIndex]; DropDownList drp_Level = row.FindControl("drp_Level") as DropDownList; drp_Level_SelectIndexChanged(drp_Level, new EventArgs()); DropDownList Organization = row.FindControl("drp_Organization") as DropDownList; Organization.SelectedValue = (row.FindControl("hdf_Organization") as HiddenField).Value; #endregion } protected void GV_Detail_RowDeleting(object sender, GridViewDeleteEventArgs e) { } protected void drp_Level_SelectIndexChanged(object sender, EventArgs e) { GridViewRow row = GV_Detail.Rows[GV_Detail.EditIndex]; DropDownList item = row.FindControl("drp_Organization") as DropDownList;//获得后面的DropDownList item.DataTextField = "Name"; item.DataValueField = "ID"; item.DataSource = GetAllOrganization((sender as DropDownList).SelectedValue);//根据当前的DropdownList的选择项 加载后者的数据源 item.DataBind(); } private void bdDetail(string memberID) { if (string.IsNullOrEmpty(memberID)) { if (ViewState["MemberID"] != null) { memberID = ViewState["MemberID"].ToString(); } } BLLRole_Attribute bllRole_Attribute = new BLLRole_Attribute(); GV_Detail.DataSource = bllRole_Attribute.GetRoleAttributesByMemberID(memberID); GV_Detail.DataBind(); }
相关文章推荐
- 关于Dropdownlist绑定GridView分页出错问题
- GridView 自定义分页--DropDownList翻页与保存状态问题
- 第一次提问题--根据dropdownlist 的选择而动态显示或隐藏GridView的某些字段!!
- Gridview与DropDownList联动添加数据实时更新
- GridView中实现DropDownList联动
- GridView中实现DropDownList联动
- GridView中两个DropDownList联动
- GridView分页和通过DropDownList筛选的问题
- Gridview与DropDownList联动添加数据实时更新
- 工作小结(二十三)-gridview中dropdownlist联动
- GridView编辑状态下DropDownList的联动
- Asp .NET使用控件常见问题大全(设计时选中、Button、TextBox、DropDownList、GridView、UpdatePanel 等)
- GridView绑定DropDownList的小问题
- 关于DropDownList无刷新联动的问题
- gridview中连个dropdownlist联动
- Gridview中数据绑定Dropdownlist 组件默认值为空null的问题
- 图片式教程:不写一行代码,实现 DropDownList 和 GridView 联动
- C# DropDownList二级联动问题
- 自定义的多级联动dropdownlist的selectedvalue不变化的问题
- GridView中DropdownList,Textbox同一行无刷新联动