GridView中多个DropDownList的联动问题

先大致说下需求:

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();
        }


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值