2012-05-09 3 views
1

現時点では、私はすでにテーブルからの情報を入力したddlを持っています。自動ポストバックに設定されている顧客のリストです。私が実行している問題は、デフォルトの選択が常にリストの最初の顧客であり、1つの顧客をクリックしてポストバックを行い、必要なすべての情報を取得し、最初の顧客に選択肢を設定し、ポストバックをしないでください。あらかじめ設定されたドロップダウンリストをasp C#に取り込むことはできますか?

私が考えて達成しようとしている修正は、 "Please Select Customer"のようなddlにnull値を設定することです。 DDL編集項目に入って項目を追加しましたが、しかし、テーブルへの呼び出しにはそれが含まれていません。それを含める方法はありますか?

Mozilla Firefoxでは、ポストバック後に同じ顧客にとどまるため、この問題は発生しません。私が何かを片付けることができる場合、私は自分のベストを尽くします、役に立つかもしれないコードのどの部分がある場合、私はそれを

//save the value of the current selection to reselect later if still exists 
string origSelectedItem = ddlSelectedCustomer.SelectedValue; 

//clear and refill the list 
ddlSelectedCustomer.Items.Clear(); 

//check what role the user is in 
string usersRole = Roles.GetRolesForUser(Membership.GetUser().UserName)[0]; 

MembershipUser user = Membership.GetUser(); 

switch (usersRole) 
{ 
    case "SalesRep": 
     ddlSelectedCustomer.DataSource = 
     DAL.Util.getSalesRepCustomers((Guid)user.ProviderUserKey); 
     ddlSelectedCustomer.DataBind(); 
     break; 

    case "BasicUser": 
    case "Customer": 
     ddlSelectedCustomer.DataSource = 
     DAL.Util.getCustomersListForUser((Guid)user.ProviderUserKey); 
     ddlSelectedCustomer.DataBind(); 
     break; 

    case "Admin": 
    case "SuperAdmin": 
     ddlSelectedCustomer.DataSource = DAL.Util.getAllCustomersList(); 
     ddlSelectedCustomer.DataBind(); 
     break; 
    default: 
     break; 
} 

//if user had a company selected, reselect it if it exists 
if (origSelectedItem != string.Empty) 
    ddlSelectedCustomer.SelectedValue = origSelectedItem; 
else if (ddlSelectedCustomer.Items.Count == 1)  
    //if only one item in the list, select it 
    ddlSelectedCustomer.Items[0].Selected = true; 

を提供することができます。また、これはのマスターページにコードビハインドでありますサイト。

あなたは

+0

あなたのDDLであなたの非常に最初の項目として「選択してください」のコードスニペットを追加しますうわー? –

+0

コードが役に立ちます。一見すると、最初の訪問ではなく、各ページの更新時にDDLを再投入していると思われます。それはDDLにあなたが選択したものを「忘れる」原因になります。しかし、FFの行動については確信していません... – n8wrl

+0

これは「グラントの墓に埋葬された人」のような謎のように聞こえます。 – Jeff

答えて

3

あなたがtrueにAppendDataBoundItemsを設定する必要がありがとう、そしてあなたは、空の最初の項目を追加することができます。

<asp:DropDownList ID="DropDownList1" runat="server" AppendDataBoundItems="true"> 
    <asp:ListItem Text="" Value="" /> <!-- empty first item -->  
</asp:DropDownList> 

それはあなたが複数回リストをバインドする場合、あなたはそれが重複するアイテムを追加しないようにリストをクリアする必要があることに注意することが重要です。

あなたはコードビハインドで空の項目を追加したい場合は、リストをクリアした後、あなたはこのようにそれを行うことができます。

DropDownList1.Items.Clear(); 
DropDownList1.Items.Add(new ListItem(string.Empty, string.Empty)); 

//bind list 
+0

このようなものを探していた。私はそれがこの行に沿っていることを疑っていましたが、この例では解決しませんでした。 – John

+0

これは、リストをバインドする前にリストを消去しているためです。必要に応じて、リストの内容をクリアした後、コードビハインドで空の項目を追加することができます。 –

+0

ああ、明白なことで盲目的に私の問題を解決する非常にジェームス! – John

1

私はこの質問はすでになく、追加するための代替を持って知っていますそれだけでASPXに触れることなく分離コードは次のようになりしますあなたの変数を使用して:

ddlSelectedCustomer.Items.Insert(0, new ListItem("Please Select")); 

これはあなたがDDL datasoを設定する方法の

関連する問題