2013-03-22 28 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