【问题标题】:Converting text box to dropdown in Dynamic Data将文本框转换为动态数据中的下拉列表
【发布时间】:2013-03-22 12:07:13
【问题描述】:

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

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

【问题讨论】:

  • 如果您添加一些代码来显示您目前的操作方式可能会有所帮助
  • 实际上,在过去的几天里,我自己设法解决了这个问题。我已经在底部发布了我的解决方案。

标签: .net asp.net-dynamic-data


【解决方案1】:

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

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

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

【讨论】:

  • 没有真正看到这对我有什么帮助。提供的示例用于查询现有表以缩小列出的范围。我需要的是能够使用另一个表中的值填充下拉列表,以便在使用插入页面创建新条目时,它将该列的值设置为等于另一个表中的值。
【解决方案2】:

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

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

首先在 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 控件和您的新控件背后的代码以找出答案。

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多