2009-05-03 69 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的地方。

如果这个描述不够充分,那么你将不得不说什么方式是不够的,以便我或其他人可以回答。

相关问题