asp.net, как добавить TemplateField программно для 10 выпадающего списка

Я в третий раз задаю этот вопрос. Я не получаю хороших ответов по этому поводу. Я хотел бы получить некоторую помощь, но я буду продолжать задавать этот вопрос, потому что это хороший вопрос, и поэтому эксперты не должны игнорировать это...

Поэтому у меня есть около 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>

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

Добавлено 03.05.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;
    }
}

2 ответа

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

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

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

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

Другие вопросы по тегам