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

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

Итак, у меня есть около 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;
    }
}

Ответы [ 2 ]

2 голосов
/ 15 апреля 2010

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

1 голос
/ 03 мая 2009

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

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

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

...