2009-05-03 1 views
2

Это мой третий вопрос, задающий этот вопрос. Я не получаю хорошие ответы на это. Хотелось бы мне помочь, но я буду продолжать задавать этот вопрос, потому что его хороший вопрос и эксперты SO не должны игнорировать это ...asp.net Как добавить TemplateField программно около 10 dropdownlist

Итак, у меня есть около 10 элементов управления выпадающего списка, которые я вручную добавляю в элемент управления 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> 

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

Добавлено 5/3/09

Это то, что я до сих пор, и я до сих пор не могу добавить выпадающий список программно.

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

Прекратите делать ответы, содержащие ценную информацию о вопросе ... просто отредактируйте свой вопрос. –

+0

получил это ... мое плохое ... Я сделаю это в следующий раз ... –

+0

Plz проверить мой ответ ..... –

ответ

1

Что вы пытаетесь? Какая у вас проблема? Если вы не ответили на эти вопросы раньше, то неудивительно, что вы не получили хорошего ответа.

Очевидно, вам необходимо найти TemplateFields, для которого вы хотите добавить выпадающие списки, и вы должны установить их свойство EditItemTemplate в экземпляр класса, который реализует ITemplate. У этого экземпляра будет метод InstantiateIn, вызываемый для добавления элементов управления в родительский элемент управления. В этом случае вы должны настроить и добавить DropDownList.

Если это описание не является адекватным, то вам придется сказать, каким образом он не является адекватным, чтобы я или кто-то другой мог ответить.

+0

Как найти самое первое поле, в которое я должен добавить поле шаблона ... –

+0

DetailsView имеет свойство Fields, которое имеет указатель, поэтому view.Fields [0]. –

2

Я нашел эту статью http://aspalliance.com/1125 о прогматически создании поля шаблона. Надеюсь, это поможет решить эту проблему.

Смежные вопросы