0

私はここで私のプロジェクトに行き詰まっており、本当に助けが必要です! 「DropDownPostal」と「DropDownCity」の 2 つのドロップダウンリストがあります。ユーザー/従業員がシステムにログインすると、最初のドロップダウン リストに郵便番号のリストが表示されます。彼が郵便番号を選択し、タブで 2 番目のドロップダウン「都市」に移動したとします。ユーザーが以前に選択した郵便で都市を更新したい。ログインを操作し、データベースから DropDownPostal にデータを取得しています。しかし、他の DropDownCity をデータで更新することはできません!

postaldropdown 用に作成したイベントのコードを次に示します。「onLeave」イベントを作成しようとしています。

  using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Web;
   using System.Web.UI;
   using System.Web.UI.WebControls;

 namespace Test
  {
public partial class WebForm1 : System.Web.UI.Page
{

    // Entity
    DanxWebsiteEntities dwe = new DanxWebsiteEntities();

    protected void Page_Load(object sender, EventArgs e)
    {


        //Dropdown postback
        //DropDownListPostal.AutoPostBack = false;

        //Sessions
        if (Session["UserID"] == null && Session["Name"] == null)
        {
            Response.Redirect("Error.aspx");
        }
        else
        {
            msg1.Text = "User id: "+Session["UserID"].ToString();
            msg2.Text = "User Name: " + Session["Name"].ToString();
        }   
        //Update dropdownpostal
        if (!IsPostBack)
        {
            //Guid is structure type 
            Guid id =(Guid) Session["UserID"];
            DropDownListPostal.DataSource = (from custumAdr in dwe.VW_CustumAddress
                                             where custumAdr.UserID ==(Guid)id
                                             select custumAdr).ToList();
            DropDownListPostal.DataTextField = "Postal";
            DropDownListPostal.DataValueField = "UserID";
            DropDownListPostal.DataBind();
        }
    }



    protected void DropDownListPostal_SelectedIndexChanged1(object sender, EventArgs e)
    {
        foreach (var data in dwe.VW_CustumAddress)
            if (data.Postal == DropDownListPostal.SelectedItem.ToString())
            {
                DropDownListBy.Text = data.City;

            }
            else
            {

            }
    }
    }

}

このコードが正しいかどうかさえわかりません。コードに関する詳細なヘルプをいただければ幸いです。

乾杯 :-)

4

4 に答える 4

1

dropDownListCity私の理解が正しければ、 で選択した値に従って、で表示される値を変更するだけで済みますdropDownListPostal。これを行うには、両方のドロップダウン リストをバインドし、トリガーPage_Loadされたときに選択したインデックスを処理する必要があります。SelectedIndexChanged

private IEnumerable<KeyValuePair<string, string>> GetData()
{
    using(var dataContext = new DbEntities())
    {
        return dataContext.VW_CustumAddress 
            .ToList() 
            .Select(item => new KeyValuePair<string, string>(item.Postal, item.City))
            .ToArray();
    }
}

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostback)
    {
        IEnumerable<KeyValuePair<string,string>> data = GetData();
        //Bind Postal dropdown list
        dropDownListPostal.DataSource = data.Select(kvp => kvp.Key).ToList();
        // ^ Select only 'Postal' column in dropdown list.
        dropDownListPostal.DataBind();
        // Bind City dropdown list
        // We need to bind to a key-value pair to know the correspondence between items
        dropDownListCity.DataValueField = "Key";
        dropDownListCity.DataTextField = "Value";
        dropDownListCity.DataSource = data;
        dropDownListCity.DataBind();
    }
}

SelectedIndexChangedコントロールをデータにバインドした後は、のイベントを処理するだけで済みます(のマークアップでdropDownListPostal設定することを忘れないでください)。 EDIT : 項目を選択する前に、ドロップダウン リストの選択を解除して、項目が 1 つだけ選択されていることを確認します。AutoPostback="true"dropDownListPostal

protected void OnDropDownListPostalSelectedIndexChanged(object sender, EventArgs e)
{
    dropDownListCity.ClearSelection();
    var postal = dropDownListPostal.SelectedValue;
    var listItem = dropDownListCity.Items.FindByValue(postal);
    listItem.Selected = true;
}

それはそれを行う必要があります。それが役に立てば幸い。

于 2012-09-25T11:02:31.187 に答える
1
  1. DropDownListPostal が AutoPostBack = True であることを確認してください

  2. コードに DropDownListPostal.DataBind() がないため、割り当てているデータはバインドされていません。データが .DataSource に割り当てられた後に、これが呼び出されることを確認してください。

于 2012-09-25T10:00:40.793 に答える
1

ここで述べたように

//Dropdown postback
//DropDownListPostal.AutoPostBack = false;

Trueにしてください。

<asp:DropDownList ID="DropDownListPostal" runat="server"  AutoPostBack="true" OnSelectedIndexChanged="DropDownListPostal_SelectedIndexChanged"></asp:DropDownList>

DropDownListBy.Text = data.City;を使用する代わりに

ドロップダウン リストを値で選択することもできます。

 DropDownListBy.SelectedValue = data.id

これがあなたを助けることを願っています

于 2012-09-25T10:37:44.483 に答える
0

このコードで試すことができます

 //You must bind your datas before set Text Value
 DropDownListBy.DataSource =...;
 DropDownListBy.DataBind();

 DropDownListBy.Text = data.City;

リンク: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listcontrol.text.aspx

または、次のこともできます

 DropDownListBy.Items.Add(data.City);
于 2012-09-25T09:59:06.690 に答える