【问题标题】:ASP.net list of dropdownlists - similar to Access continuous formASP.net 下拉列表列表 - 类似于 Access 连续表单
【发布时间】:2009-07-07 13:45:54
【问题描述】:

我正在寻找的是一种在 asp.net 中模仿 MS-Access 风格的连续形式的方法。在一种特殊情况下,我想要一个控件,绑定到数据源,该数据源为每一行返回一个下拉列表,绑定到数据源中的值。对任何下拉列表的任何更改都会立即更新数据库。

我已经使用转发器控件实现了一半,在 Repeater.ItemDataBound 事件中分配了 DropDownList.SelectedValue。

但是现在,假设我将 OnSelectedIndexChanged 事件添加到 DropDownList - 我将如何查询中继器以了解我在哪一行(例如,获取主键值)

我不确定这是否可以轻松完成.. 所以问题是我真的应该做什么?我不想使用需要我选择要编辑的行的 GridView。我只想让下拉列表自动回发任何更新。

希望这很清楚吗?!

干杯! :D

【问题讨论】:

    标签: asp.net drop-down-menu repeater selectedindexchanged


    【解决方案1】:

    例如,假设我们绑定到一个名为 Record 的自定义类

    public class Record
    {
        public int Id;
        public string Value;
    }
    

    如果您将自定义逻辑放在 Repeater.OnItemCreated 事件上,您可以将主键附加到下拉列表的 id

    protected void Repeater_ItemCreated(object sender, RepeaterItemEventArgs e)
    {
        if (!(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem))
            return;
    
        var dataItem = e.Item.DataItem as Record;
        if (dataItem == null) return;
    
        var dropdown = e.Item.FindControl("myDropDown") as DropDownList;
        if (dropdown == null) return;
    
        dropdown.ID = dropdown.ID + dataItem.Id;
    }
    

    然后在 SelectedIndexChange 上,您可以从触发事件的下拉菜单中拉出 id。

    protected void SelectedIndexChanged(object sender, EventArgs e)
    {
        var dropdown = sender as DropDownList;
        if (dropdown == null) return;
    
        var stringId = dropdown.ID.Replace("myDropDown", "");
        int id;
        if (Int32.TryParse(stringId, out id))
        {
            updateRecord(id, dropdown.SelectedValue);
        }
    }
    

    这是一个非常丑陋的 hack,但它应该允许你做你想做的事。

    【讨论】:

    • 谢谢 NerdFury - 看起来它可能是目前对我来说最好的选择,尽管我必须解决一些数据绑定问题..
    • 除此之外,在 itemdatabound 事件之前,我找不到从中继器的数据源获取 ID 的方法,并且在那里(而不是 itemcreated)我无法更改下拉列表的 ID!因此,现在按照 Wyatt 的自定义控件路线...
    • 没有理由不能在 ItemDataBound 事件处理程序中更改下拉框的 ID。你所看到的让你相信的事情是什么?
    【解决方案2】:

    解决此问题的最简单方法是模仿 Access 连续表单 ASP.NET 样式。这将是制作一个 UserControl 来处理行级 UI,然后将所述 UserControl 放入转发器中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-04
      • 1970-01-01
      • 2014-11-25
      • 1970-01-01
      相关资源
      最近更新 更多