【问题标题】:Eval/Binding DropDownList in DetailsView详细信息视图中的评估/绑定下拉列表
【发布时间】:2012-08-23 14:39:25
【问题描述】:

我在详细信息视图中有一个下拉列表,它从一个表中获取其值并将所选值绑定到另一个表。我遇到的问题是,每当回发发生时,我从中获取 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;
        }
       }

【问题讨论】:

  • 是在itemtemplate和edittemplate中渲染的下拉列表吗?这篇文章是否回调用填充详细信息视图的方法?
  • 下拉列表仅在 中呈现,详细信息视图始终仅处于插入模式。所以我不确定我碰巧在哪里填充它?我将输入的信息发送到由数据处理程序处理的表中。
  • “reqleavecode”是否包含唯一数据?
  • 不,它被定义为一个允许两个字符......它就像:“1F”或“4”

标签: c# asp.net data-binding detailsview


【解决方案1】:

我遇到了同样的问题,我使用以下技术解决了它。请根据您的需要修改此代码。基本上,您需要在顶部有两个变量,即该类的全局变量。然后您可以在 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();
    }
}

【讨论】:

  • 好的,我几乎已经正确修改了,我唯一不确定的是这一行:dropDownListVendor.DataSource = CatalogAccess.GetVendors();特别是 CatalogAccess.GetVendors() 它不适用于我的 getData() 方法,主要是因为我不确定我的 CatalogAccess 等价物是什么。
  • 这基本上是一个从 DataAccessLayer 返回的数据表。你可以直接在这里绑定你的数据表
  • 我编辑了上面的代码以显示我在做什么。如果你能给我更多的指导
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-06
  • 2016-02-08
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多