2013-03-22 29 views
1

我有一个使用两个表的动态数据应用程序。对于其中一个表格,我想根据另一个表格中的列设置一个列,使用填充其他表格中的值的下拉列表。目前该列在页面上作为文本框条目生成。但是,动态数据不提供下拉项目来为此提供UIHint。我尝试修改枚举字段控件来做到这一点,但似乎无法让它工作。将文本框转换为动态数据中的下拉列表

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

+0

如果你添加了一些代码来显示你目前在做什么,可能会有所帮助 – JRoughan 2013-03-28 02:35:57

+0

其实我在过去的几天里设法弄清楚了这一点。我已经在底部发布了我的解决方案。 – MattD 2013-03-28 13:45:07

回答

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控件的背后的代码和你的新控件来解决这个问题。

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

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

这样做,这样,你只有控制适用于本列此页面上。您需要将ReadOnly值设置为true,否则它将呈现为文本输入字段而不是下拉列表。

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

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

1

您是否使用过滤器控件?

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

或许检查这篇文章将帮助您: http://www.olegsych.com/2010/07/understanding-aspnet-dynamic-data-filter-templates/

+0

不是真的看到这对我有什么帮助。提供的示例用于查询现有的表以缩小列出的范围。我需要的是能够使用另一个表中的值填充下拉列表,以便在使用插入页面创建新条目时,将该列的值设置为等于另一个表中的值。 – MattD 2013-03-22 13:28:39