如何在用户在 asp.net 3.5 中分页和排序时获取绑定下拉列表

本文关键字:排序 绑定 下拉列表 分页 获取 用户 asp net | 更新日期: 2023-09-27 17:56:33

我有两个下拉列表的网格视图。 因此用户可以在运行时更改下拉列表值。 这是我的网格视图设计代码:

  <asp:TemplateField HeaderText="Status" SortExpression="status_id">
<asp:TemplateField HeaderText="Status" SortExpression="status_id">
<HeaderTemplate>
<asp:LinkButton ID="lbut_sortstatus1" runat="server" 
CommandArgument="status_id" CommandName="Sort" CssClass="normaltext" 
Font-Bold="true" Text="Status"></asp:LinkButton>
<asp:PlaceHolder ID="placeholderstatus1" runat="server"></asp:PlaceHolder>
</HeaderTemplate>
<ItemTemplate>
<asp:UpdatePanel ID="UpdatePanel2" runat="server">
<ContentTemplate>
<asp:DropDownList ID="DDL_StatusList1" runat="server" 
DataTextField="status_name" DataValueField="Id" AppendDataBoundItems="true" 
AutoPostBack="True" 
onselectedindexchanged="DDL_StatusList1_SelectedIndexChanged">
</asp:DropDownList>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID ="DDL_StatusList1" 
EventName="SelectedIndexChanged" />  
</Triggers>
</asp:UpdatePanel>
</ItemTemplate>
<HeaderStyle CssClass="headinglist_bg" HorizontalAlign="Left" />
<ItemStyle HorizontalAlign="Left" />
</asp:TemplateField>

这是我Page_Load代码怎么样:

protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            Panel_View.Visible = false;
            Session["SearchtText"] = null;
            Session["ColumnName"] = null;
            this.FillGrid((String)Session["ColumnName"] ?? null, (String)Session["SearchtText"] ?? null);
            Bind_DDL_Column_List();
            Bind_DDL_Title();
            Bind_DDL_Status();
            Bind_DDL_Group();
            Bind_DDL_Countries();
        }
        this.GetData();
    }

这是我的下拉列表绑定方法之一,它显示了我如何绑定网格视图下拉列表。

     public void Bind_DDL_Group()
        {
            using (DataClassesDataContext db = new DataClassesDataContext())
            {
                var query = db.Groups.Select(g=>g).OrderBy(g=>g.Group_name).ToList();
                DataSet myDataset = new DataSet();
                DataTable dt = new DataTable();
                dt.Columns.Add("Id", typeof(int));
                dt.Columns.Add("Group_name", typeof(string));
                foreach (var item in query)
                {
                    DataRow dr = dt.NewRow();
                    dr["Id"] = item.Id.ToString();
                    dr["Group_name"] = item.Group_name.ToString();
                    dt.Rows.Add(dr);
                }
                myDataset.Tables.Add(dt);
                DDL_GroupList.DataSource = myDataset;
                DDL_GroupList.DataBind();
                DropDownList bind_dropdownlist;
                foreach (GridViewRow grdRow in GV_ViewUserList.Rows)
                {
                    bind_dropdownlist = (DropDownList)(GV_ViewUserList.Rows[grdRow.RowIndex].Cells[8].FindControl("DDL_GroupList1"));
                    bind_dropdownlist.DataSource = myDataset;
                    bind_dropdownlist.DataBind();
        }
    }
}
但是,

在页面加载第一次时,它可以成功工作,但是当用户单击排序或分页时,下拉列表变为空。 我怎么会(!Page.IsPostBack) Page_Load绑定它们.

我在这里做错了什么..请帮帮我...

如何在用户在 asp.net 3.5 中分页和排序时获取绑定下拉列表

请将下拉绑定代码从 if(!Page.IsPostBack) 条件

因为当转到网格视图中的另一个页面时,页面将回发到服务器

如果(!Page.IsPostBack) 条件将返回 false。

将代码更改为

if   (!Page.IsPostBack)
    {
        Panel_View.Visible = false;
        Session["SearchtText"] = null;
        Session["ColumnName"] = null;
        this.FillGrid((String)Session["ColumnName"] ?? null, (String)Session["SearchtText"] ?? null);
        Bind_DDL_Column_List();
        Bind_DDL_Title();
        Bind_DDL_Countries();
    }
        Bind_DDL_Status();
        Bind_DDL_Group();
    this.GetData();