1

我在详细信息视图中有一个下拉列表,它从一个表中获取其值并将所选值绑定到另一个表。我遇到的问题是,每当回发发生时,我从中获取 ddl 值的表就会更改回默认读取。这使得选择的值总是更改为 null (这是列表的第一个值)

我试过把 !IsPostBack 放在 page_load 中:

   if (!IsPostBack)
   {
        DetailsView1.DataBind();
   }

我确实有第二个 ddl,它依赖于第一个列表,但那个工作正常,它是第一个始终为空且不会保存所选值的列表。

这是第一个ddl:

  <asp:DropDownList ID="DropDownList1" runat="server" AppendDataBoundItems="True" 
    AutoPostBack="True" DataSourceID="SQLLEAVECODE" DataTextField="LEAVETYPE" 
    DataValueField="LEAVECODE" Height="18px" style="text-transform:uppercase;"
    onselectedindexchanged="DropDownList1_SelectedIndexChanged"
    SelectedValue='<%# bind("reqleavecode") %>' Width="145px">
    <asp:ListItem></asp:ListItem>
  </asp:DropDownList>

我似乎无法弄清楚这一点,我认为这可能与我的绑定有关。

    public string lvtype;
    public string lvrequest;

    private DataSet GetData()
    {
        ConnectionStringSettingsCollection cssc = ConfigurationManager.ConnectionStrings;

        var sql = "SELECT LEAVETYPE, LEAVECODE FROM TESTBWTIME.BWLVTYPE ORDER BY LEAVECODE";

        using (iDB2Connection conn = new iDB2Connection(GetConnectionString()))
        {
            conn.Open();

            using (iDB2Command cmd = new iDB2Command(sql, conn))
            {
                cmd.DeriveParameters();

                using (iDB2DataAdapter da = new iDB2DataAdapter(cmd))
                {
                    DataSet ds = new DataSet();
                    da.Fill(ds);

                    return ds;
                }
            }
        }
    }

    private String GetConnectionString()
    {
        ConnectionStringSettingsCollection cssc = ConfigurationManager.ConnectionStrings;

        return cssc["connStringNET"].ToString();
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        DropDownList ddl1 = (DropDownList)(DetailsView1.FindControl("DropDownList6"));
        DropDownList ddl2 = (DropDownList)(DetailsView1.FindControl("DropDownList5"));
        DataSet ds = GetData();
        if (!Page.IsPostBack)
        {
            ddl1.DataSource = ds;
            ddl1.DataBind();
            lvtype = ddl1.SelectedValue;

            ddl2.DataSource = ds;
            ddl2.DataBind();
            lvrequest = ddl2.SelectedValue;
        }
        else
        {
            lvtype = ddl1.SelectedValue;
            lvrequest = ddl2.SelectedValue;
        }
       }
4

1 回答 1

0

我遇到了同样的问题,我使用以下技术解决了它。请根据您的需要修改此代码。基本上,您需要在顶部有两个变量,即该类的全局变量。然后您可以在 Postback 中获取下拉列表的选定值和选定的索引更改事件,如下所示;

public string vendorId;
public string categoryId;

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        dropDownListVendor.DataSource = CatalogAccess.GetVendors();
        dropDownListVendor.DataBind();
        vendorId = dropDownListVendor.SelectedValue;

        dropDownListCategory.DataSource = CatalogAccess.GetCategoriesInVendor(vendorId);
        dropDownListCategory.DataBind();
        categoryId = dropDownListCategory.SelectedValue;
    }
    else
    {
        vendorId = dropDownListVendor.SelectedValue;
        categoryId = dropDownListCategory.SelectedValue;
    }
}

protected void dropDownListVendor_SelectedIndexChanged(object sender, EventArgs e)
{
    if (Page.IsPostBack)
    {
        dropDownListCategory.DataSource = CatalogAccess.GetCategoriesInVendor(vendorId);
        dropDownListCategory.DataBind();
    }
}
于 2012-08-23T15:03:01.817 回答