2009-05-03 24 views
2

這是我第三次提出這個問題。對此我沒有得到很好的答案。我希望我能得到一些幫助,但我會一直問這個問題,因爲它的一個很好的問題,所以專家不應該忽略這...asp.net如何以編程方式添加TemplateField約10個下拉列表

所以我有大約10個dropdownlist控件,我手動添加在DetailsView控件手動如下。我應該能夠以編程方式添加。請幫幫忙,不要忽視...

<asp:DetailsView ID="dvProfile" runat="server" 
     AutoGenerateRows="False" DataKeyNames="memberid" DataSourceID="SqlDataSource1" 
     OnPreRender = "_onprerender" 

     Height="50px" onm="" Width="125px"> 

     <Fields> 


      <asp:TemplateField HeaderText="Your Gender"> 
        <EditItemTemplate> 
          <asp:DropDownList ID="ddlGender" runat="server" 
              DataSourceid="ddlDAGender" 
              DataTextField="Gender" DataValueField="GenderID" 
              SelectedValue='<%#Bind("GenderID") %>' 
           > 

          </asp:DropDownList> 
        </EditItemTemplate> 

        <ItemTemplate > 
           <asp:Label Runat="server" Text='<%# Bind("Gender") %>' ID="lblGender"></asp:Label> 
        </ItemTemplate> 

       <asp:CommandField ShowEditButton="True" ShowInsertButton="True" /> 
      </Fields> 
     </asp:DetailsView> 

================================== =====================

添加於09年5月3日

這是我到目前爲止,我仍然不能加以編程方式下拉列表。

private void PopulateItemTemplate(string luControl) 
{ 
    SqlDataSource ds = new SqlDataSource(); 
    ds = (SqlDataSource)FindControl("ddlDAGender"); 
    DataView dvw = new DataView(); 
    DataSourceSelectArguments args = new DataSourceSelectArguments(); 

    dvw = (DataView)ds.Select(args); 
    DataTable dt = dvw.ToTable(); 


    DetailsView dv = (DetailsView)LoginView2.FindControl("dvProfile"); 

    TemplateField tf = new TemplateField(); 
    tf.HeaderText = "Your Gender"; 
    tf.ItemTemplate = new ProfileItemTemplate("Gender", ListItemType.Item); 
    tf.EditItemTemplate = new ProfileItemTemplate("Gender", ListItemType.EditItem); 
    dv.Fields.Add(tf); 
} 


public class ProfileItemTemplate : ITemplate 
{ 
    private string ctlName; 
    ListItemType _lit; 
    private string _strDDLName; 
    private string _strDVField; 
    private string _strDTField; 
    private string _strSelectedID; 
    private DataTable _dt; 


    public ProfileItemTemplate(string strDDLName, 
                 string strDVField, 
                 string strDTField, 
                 DataTable dt 
                 ) 
    { 
     _dt = dt; 
     _strDDLName = strDDLName; 
     _strDVField = strDVField; 
     _strDTField = strDTField; 
    } 

    public ProfileItemTemplate(string strDDLName, 
                string strDVField, 
                string strDTField, 
                string strSelectedID, 
                DataTable dt 
                ) 
    { 
     _dt = dt; 
     _strDDLName = strDDLName; 
     _strDVField = strDVField; 
     _strDTField = strDTField; 
     _strSelectedID = strSelectedID; 
    } 

    public ProfileItemTemplate(string ControlName, ListItemType lit) 
    { 
     ctlName = ControlName; 
     _lit = lit; 


    } 



    public void InstantiateIn(Control container) 
    { 


     switch(_lit) 
     { 
      case ListItemType.Item : 
       Label lbl = new Label(); 
       lbl.DataBinding += new EventHandler(this.ddl_DataBinding_item); 
       container.Controls.Add(lbl); 
       break; 
      case ListItemType.EditItem : 
       DropDownList ddl = new DropDownList(); 
       ddl.DataBinding += new EventHandler(this.lbl_DataBinding); 
       container.Controls.Add(ddl); 

       break; 
     } 
    } 

    private void ddl_DataBinding_item(object sender, EventArgs e) 
    { 

     DropDownList ddl = (DropDownList)sender; 
     ddl.ID = _strDDLName; 
     ddl.DataSource = _dt; 
     ddl.DataValueField = _strDVField; 
     ddl.DataTextField = _strDVField; 
    } 



    private void lbl_DataBinding(object sender, EventArgs e) 
    { 
     Label lbl = (Label)sender; 
     lbl.ID = "lblGender"; 

     DropDownList ddl = (DropDownList)sender; 
     ddl.ID = _strDDLName; 
     ddl.DataSource = _dt; 
     ddl.DataValueField = _strDVField; 
     ddl.DataTextField = _strDTField; 
     for (int i = 0; i < _dt.Rows.Count; i++) 
     { 
      if (_strSelectedID == _dt.Rows[i][_strDVField].ToString()) 
      { 
       ddl.SelectedIndex = i; 
      } 
     } 

     lbl.Text = ddl.SelectedValue; 
    } 
} 
+1

停止提供包含寶貴問題信息的答案......只需編輯您的問題。 – 2009-05-03 19:04:19

+0

明白了...我的壞...我會在下次做... – 2009-05-03 19:15:48

回答

1

你有什麼試過的?你有什麼問題?如果你之前沒有回答過這些問題,那麼你沒有收到一個好的答案也就不足爲奇了。

顯然,您必須找到要爲其添加下拉列表的TemplateFields,並且您必須將其EditItemTemplate屬性設置爲實現ITemplate的類的實例。該實例將調用InstantiateIn方法將控件添加到父控件。在這種情況下,這是您要配置和添加DropDownList的地方。

如果這個描述不夠充分,那麼你將不得不說什麼方式是不夠的,以便我或其他人可以回答。

相關問題