Установить выбранное значение DropDownList в GridView EditItemTemplate в ASP.Net - PullRequest
0 голосов
/ 05 октября 2019

Мне нужно заполнить выбранное значение выпадающего списка, получая из базы данных в edititemtemplate вида сетки в asp.net, используя c #.

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

enter image description here

protected void GridView2_RowEditing(object sender, GridViewEditEventArgs e)
{
    GridView g2 = (GridView)sender;
    g2.EditIndex = e.NewEditIndex;

    GridViewRow gvCustomerRow = g2.NamingContainer as GridViewRow;
    int customerId = (int)gvProducts.DataKeys[gvCustomerRow.RowIndex].Value;

    sql = @String.Format(" SELECT * FROM `doTable` ");
    sql += String.Format(" WHERE sID IN ('{0}') ", customerId);

    g2.DataSource = GetData(sql);
    g2.DataBind();

    DateTime dateofBirth = new DateTime();
    ddlMonth.DataSource = Enumerable.Range(1, 12).Select(a => new
    {
        MonthName = DateTimeFormatInfo.CurrentInfo.GetMonthName(a),
        MonthNumber = a
    });
    ddlMonth.DataBind();

    DropDownList ddlYear = (DropDownList)(g2.Rows[g2.EditIndex].FindControl("ddlYear"));
    ddlYear.DataSource = Enumerable.Range(DateTime.Now.Year - 0, 12).Reverse();
    ddlYear.DataBind();
    ddlYear.Items.Insert(0, new ListItem("0001", "0001"));

    ddlday.SelectedValue = dateofBirth.Day.ToString();
    ddlMonth.SelectedValue = dateofBirth.Month.ToString();
    ddlYear.SelectedValue = dateofBirth.Year.ToString();

    ddlday.DataSource = Enumerable.Range(1, DateTime.DaysInMonth(DateTime.Now.Year, 
        Convert.ToInt32(ddlMonth.SelectedValue)));
    ddlday.DataBind();
}

Ответы [ 3 ]

1 голос
/ 06 октября 2019

Если я понимаю вашу проблему:

protected void GridView2_RowEditing(object sender, GridViewEditEventArgs e)
{
    GridView g2 = (GridView)sender;
    g2.EditIndex = e.NewEditIndex;

    GridViewRow gvCustomerRow = g2.NamingContainer as GridViewRow;
    int customerId = (int)gvProducts.DataKeys[gvCustomerRow.RowIndex].Value;

    DataTable dts = new DataTable();
    DateTime dateofBirth = new DateTime();

    sql = @String.Format(" SELECT * FROM `doTable` ");
    sql += String.Format(" WHERE sID IN ('{0}') ", customerId);

    using (OdbcConnection cn =
      new OdbcConnection(ConfigurationManager.ConnectionStrings["Conn"].ConnectionString))
    {
        using (OdbcCommand cmd =
            new OdbcCommand(sql, cn))
        {
            cmd.CommandType = CommandType.Text;
            cmd.Connection.Open();

            using (OdbcDataAdapter adapt =
                new OdbcDataAdapter(cmd))
            {
                adapt.Fill(dts);
                if (dts.Rows.Count > 0)
                {
                    g2.DataSource = dts;
                    g2.DataBind();

                    DataRow row = dts.Rows[0];

                    if (String.IsNullOrEmpty(row["DateValuefromDB"].ToString()))
                    {
                        ddlMonth.DataSource = Enumerable.Range(1, 12).Select(a => new
                        {
                            MonthName = DateTimeFormatInfo.CurrentInfo.GetMonthName(a),
                            MonthNumber = a
                        });
                        ddlMonth.DataBind();
                        DropDownList ddlYear = (DropDownList)(g2.Rows[g2.EditIndex].FindControl("ddlYear"));
                        ddlYear.DataSource = Enumerable.Range(DateTime.Now.Year - 0, 12).Reverse();
                        ddlYear.DataBind();
                        ddlYear.Items.Insert(0, new ListItem("0001", "0001"));
                        ddlday.DataSource = Enumerable.Range(1, DateTime.DaysInMonth(DateTime.Now.Year, Convert.ToInt32(ddlMonth.SelectedValue)));
                        ddlday.DataBind();

                        ddlday.SelectedValue = dateofBirth.Day.ToString();
                        ddlMonth.SelectedValue = dateofBirth.Month.ToString();
                        ddlYear.SelectedValue = dateofBirth.Year.ToString();
                    }
                    else
                    {
                        ddlMonth.DataSource = Enumerable.Range(1, 12).Select(a => new
                        {
                            MonthName = DateTimeFormatInfo.CurrentInfo.GetMonthName(a),
                            MonthNumber = a
                        });
                        ddlMonth.DataBind();
                        DropDownList ddlYear = (DropDownList)(g2.Rows[g2.EditIndex].FindControl("ddlYear"));
                        ddlYear.DataSource = Enumerable.Range(DateTime.Now.Year - 0, 12).Reverse();
                        ddlYear.DataBind();
                        ddlYear.Items.Insert(0, new ListItem("0001", "0001"));
                        ddlday.DataSource = Enumerable.Range(1, DateTime.DaysInMonth(DateTime.Now.Year, Convert.ToInt32(ddlMonth.SelectedValue)));
                        ddlday.DataBind();

                        ddlday.SelectedValue = Convert.ToDateTime(row["DateValuefromDB"]).Day.ToString();
                        ddlMonth.SelectedValue = Convert.ToDateTime(row["DateValuefromDB"]).Month.ToString();
                        ddlYear.SelectedValue = Convert.ToDateTime(row["DateValuefromDB"]).Year.ToString();
                    }
                }
            }
        }
    }
}
0 голосов
/ 05 октября 2019

Я не могу комментировать, поэтому буду публиковать в качестве ответа.

"... выбраны значения по умолчанию, а не те, которые зарегистрированы в базе данных", потому что в раскрывающемся меню шаблона редактирования установлено значение"значения по умолчанию":

    ...
    DateTime dateofBirth = new DateTime();
    ...
    ddlday.SelectedValue = dateofBirth.Day.ToString();
    ddlMonth.SelectedValue = dateofBirth.Month.ToString();
    ddlYear.SelectedValue = dateofBirth.Year.ToString();
    ... 

не следует ли вам установить значение dateofBirth из базы данных?

и для ddlYear, я думаю, что лучше

    ddlYear.DataSource = Enumerable.Range(DateTime.Now.Year - 0, 12).Reverse().Select(x => x.ToString()).Append("0001")
0 голосов
/ 05 октября 2019

Создание источника данных на странице, которая выбирает список элементов для выпадающего списка. Затем свяжите источник данных с ddl. Как то так:

<EditItemTemplate>
    <asp:DropDownList ID="ddlEditCompany" runat="server"
        DataSourceID="odsCompany"                         // <-- data source.
        DataTextField="CompanyName"
        DataValueField="CompanyID"
        SelectedValue='<%# Bind("CompanyID") %>'>         // <-- select here.
    </asp:DropDownList>
</EditItemTemplate>
...