1

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

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

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

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

希望这很清楚?!

干杯! :D

4

2 回答 2

0

例如,假设我们绑定到一个名为的自定义类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);
    }
}

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

于 2009-07-07T14:28:44.593 回答
0

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

于 2009-07-07T14:36:50.070 回答