无法在select语句中获得正确的值

时间:2013-01-16 11:25:41

标签: asp.net linq

我正在尝试填充ddl(有效),当我选择'FirstName'时,会填充文本框进行编辑。 当我单步执行程序时,(drp_Customer.SelectedItem.Value)总是'23',这是我的DB中的最后一个'Id'。 填充文件但有23个详细信息..

我想我需要确保ddl的详细信息匹配。

这是我的代码。 这只是粗略的,因为我试图向某人展示它是如何运作的。

            using (CustomerDataContext obj = new CustomerDataContext())
        {
            // Get fields for drp_Customer
            // ===========================
            var allCustomers = from c in obj.Customers
                               orderby c.FirstName
                               select new
                                   {
                                       c.FirstName,
                                       c.CustomerId
                                   };

            foreach (var item in allCustomers)
            {
                drp_Customer.Items.Add(item.FirstName);
                drp_Customer.SelectedItem.Value = item.CustomerId.ToString();
            }

            drp_Customer.DataBind();

            if (drp_Customer.SelectedItem.Text == " -- Select Customer -- ")
            {
                lbl_message.Text = "Please select a customer to update";
            }
            else if (drp_Customer.SelectedItem.Text != " -- Select Customer -- ")
            {

       Customer myCust = obj.Customers.SingleOrDefault(c => c.CustomerId ==  Convert.ToInt32       
            (drp_Customer.SelectedItem.Value));

                if (myCust != null)
                {
                    txt_FirstName.Text = myCust.FirstName;
                    txt_Surname.Text = myCust.Surname;
                    txt_HouseNumber.Text = myCust.HouseNumberName;
                    txt_Address.Text = myCust.Address;
                    txt_Town.Text = myCust.Town;
                    txt_Telephone.Text = myCust.Telephone;
                    txt_Postcode.Text = myCust.Postcode;
                }

            }

2 个答案:

答案 0 :(得分:0)

使用DataTextFieldDataValueField属性设置将显示的绑定对象的属性以及将用作选定值的属性:

drp_Customer.DataTextField = "FirstName";
drp_Customer.DataValueField = "CustomerId";
drp_Customer.DataSource = allCustomers.ToList();
drp_Customer.DataBind();

答案 1 :(得分:0)

选择最后一项的原因是此循环:

foreach (var item in allCustomers)
{
    drp_Customer.Items.Add(item.FirstName);
    drp_Customer.SelectedItem.Value = item.CustomerId.ToString();
}

最后一项将是所选项目,因为您总是在更改它。您需要在循环之外分配它。但您目前没有显示哪个客户是正确的选定客户。

请注意,您还可以使用DataSource + DataBind

drp_Customer.DataTextField = "FirstName";
drp_Customer.DataValueField = "CustomerId";
drp_Customer.DataSource = allCustomers;
drp_Customer.DataBind();
drp_Customer.SelectedValue = customerIDofSelectedCustomer;