1

我有一个使用两个表的动态数据应用程序。对于其中一个表,我想根据另一个表中的列设置一列,使用填充了另一个表中的值的下拉列表。当前,此列在页面上生成为文本框条目。但是,动态数据不提供下拉项来为此提供 UIHint。我尝试修改枚举字段控件来执行此操作,但似乎无法使其正常工作。

我应该指定这是为了从插入页面为其中一个表添加一个新条目。我希望使用从另一个表中的列填充的值的下拉列表,根据另一个表中的列中的值来设置插入页面上的一个项目。

4

2 回答 2

1

您是否使用了过滤器控件?

当用户选择 QueryableFilterRepeater 为其生成的 Label 时,FilterControl 属性返回应获得焦点的控件。在我们的日期过滤器中,这可以是下拉列表或文本框。

也许查看这篇文章会对您有所帮助: http ://www.olegsych.com/2010/07/understanding-aspnet-dynamic-data-filter-templates/

于 2013-03-22T12:13:46.547 回答
0

所以我设法自己解决了这个问题。您可以简单地修改现有字段模板之一的代码来做我想做的事情。

如前所述,我们的想法是在“插入”页面上获取一个用于数据输入的文本框,并将其转换为值的下拉列表,其中该下拉列表包含来自另一个表的数据。然后,用户将选择所需的值,并将其作为插入过程的一部分传回数据库。

首先在 FieldTemplates 文件夹中创建一个新控件。将其命名为 DropDown。您将拥有 ascx、代码隐藏文件和设计器文件。

然后,从 ascx 文件中获取 Enumeration_Edit 的代码,并将其复制到新下拉控件的 ascx 文件中。您可能需要重命名 DropDownList 控件的 ID。

使用后面的代码,从后面的 Enumeration_Edit 控件代码中复制代码并更改它们以满足下拉列表的需要。

您的 PageLoad 类应如下所示:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        OnDataBinding();
    }

    SetUpValidator(RequiredFieldValidator1);
    SetUpValidator(DynamicValidator1);
}

你的 OnDataBinding 应该这样设置:

public void OnDataBinding()
{
    //Code for binding data from a query/stored proc to a dropdown should go here.
}

保留 ExtractValues() 和 DataControl() 类,但可以去掉 EnumType() 类。

还要确保添加您可能需要的任何参考资料。比较 Enumeration_Edit 控件和您的新控件背后的代码以找出答案。

现在,要使控件在您希望它控制数据插入的列的文本框上工作。您可以简单地将 a 添加[UIHint("DropDown")]到表的部分类的适当列项中,但这会在显示时将控件应用于该列的所有实例。我为每个表设置了自定义页面,我只希望此控件用于特定列的插入功能。因此,我更改了该表的插入页面,使控制该列的行看起来像这样:

<asp:DynamicField DataField="COLUMN_NAME" UIHint="DropDown" ReadOnly="true" />

这样做,您只需将控件应用于此页面上的此列。您需要将 ReadOnly 值设置为 true,否则它仍将呈现为文本输入字段而不是下拉菜单。

从那里,您的插入页面应该在该列上有一个数据输入下拉菜单。

我只需要这一列,因此将数据绑定到我的下拉列表的代码仅设置为适用于这一列。您可以编写一个查询,根据您已将控件绑定到的列查找特定列的所有值,或者您可能只需要为需要下拉列表的每一列创建自己的字段模板为了。

于 2013-03-28T13:43:47.157 回答