将数据传递回Dropdownlist asp .net webform

时间:2015-10-06 14:08:16

标签: c# asp.net listview drop-down-menu webforms

我有一个下拉列表,不能用于编辑目的。当在listview中单击按钮Edit时,数据存在,数据应该传递回下拉列表和表单位于listview外部的其他文本框。将数据传回文本框是可以的。问题是我要编辑的下拉列表数据作为另一条记录被添加到下拉列表中。请拍下照片上的战利品,我必须重新选择正确的。否则,所选数据(例如图片中的12月)没有数据值字段,如果我没有选择底部12月并单击“更新”按钮,它将停止运行。这是我几个月下拉列表的代码。任何帮助表示赞赏。谢谢。

   public void BindMonth()
{
    ddlStartMonth.DataSource = objUIHelpers.GetAllMonths();
    ddlStartMonth.DataTextField = "StartMonthName";
    ddlStartMonth.DataValueField = "MonthId";
    ddlStartMonth.DataBind();
    ddlStartMonth.Items.Insert(0, "Select Start Month");}

然后,我把这个方法放在这样的页面加载中。

 protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        BindMonth();
    }
}

这是listview数据项编辑

protected void lvEducation_ItemCommand(object sender, ListViewCommandEventArgs e)
{
    switch (e.CommandName)
    {
        //Delete Method will be fired when command name "Delete" inside Listview is clicked.
        case ("Delete"):

            int EducationId = Convert.ToInt32(e.CommandArgument);//pass Id of Experience to identify datarow to delete
           // DeleteEducationById(ExperienceId);//Call bind to delete method and pass ExperienceId as argument

            break;

        //Edit Method will fired when command name "Edit" inside Listview is clicked.
        case ("Edit"):
            EducationId = Convert.ToInt32(e.CommandArgument); //pass Id of Experience to identify datarow to edit
            BindEducationDataToEdit(EducationId);//Call bind to edit method and pass ExperienceId as argument
            break;
    }}

这是触发将数据传回编辑的方法的一部分。

 public void BindEducationDataToEdit(int EducationId)
{
    Education edu = objJFUserBAL.GetEducationByIdToEdit(EducationId);

    txtAdditionalInfo.Text = edu.AdditionalInfo.ToString();
    ddlEndMonth.SelectedItem.Text = edu.mo.EndMonthName;
    }

当选择的数据被回发进行编辑时,我会有这样的额外数据。enter image description here

2 个答案:

答案 0 :(得分:1)

您不应该更新SelectedItem.Text。这是在改变显示的文本。相反,您应该更新选择的项目。

如果您无权访问月份名称的值,则可以执行以下操作:

ddlEndMonth.Items.FindByText(edu.mo.EndMonthName).Selected = true;

将选择带有月份文本的项目,假设存在一个。

如果项目列表中可能存在edu.mo.EndMonthName,则您需要对null进行一些检查并相应地进行处理。

答案 1 :(得分:0)

你必须手动填写一个列表,因为自动绑定不会让你选择一个"选择你的月份"项目,除非您的数据库中有一个:

public void BindMonth()
{

    List<Month> listOfMonth = new List<Month>();
    Month fakeMonth = new Month();

      // you need to see your own 
      //code and try to make a fake month with these parameters you want

    fakeMonth.StartMonthName = "Select Start Month";
    fakeMonth.MonthId = 0;


    listOfmounth.Add(fakeMonth);

    foreach(Month m in objUIHelpers.GetAllMonths())
    {
       listOfMonth.Add(m)
    }

    ddlStartMonth.DataSource = listOfMonth;
    ddlStartMonth.DataTextField = "StartMonthName";
    ddlStartMonth.DataValueField = "MonthId";
    ddlStartMonth.DataBind();
    ddlStartMonth.Items.Insert(0, "Select Start Month");}
}