2010-01-05 41 views
47

Khi người dùng điều hướng đến trang mới, chỉ mục được chọn của ddl này được xác định bởi cookie, nhưng nếu ddl không chứa giá trị của cookie đó, thì tôi muốn nó được đặt là 0. Tôi sẽ sử dụng phương pháp nào cho ddl? Là một vòng lặp cách tốt nhất, hoặc là có một tuyên bố đơn giản nếu tôi có thể thực hiện?Cách tốt nhất để kiểm tra xem danh sách thả xuống có chứa giá trị không?

Đây là những gì tôi đã cố gắng, nhưng nó không trả về một bool.

if (!ddlCustomerNumber.Items.FindByText(GetCustomerNumberCookie().ToString())) 
    ddlCustomerNumber.SelectedIndex = 0; 

Trả lời

108

Có hai phương pháp mà tôi suy nghĩ:

Bạn có thể sử dụng Có như vậy:

if (ddlCustomerNumber.Items.Contains(new 
    ListItem(GetCustomerNumberCookie().ToString()))) 
{ 
    // ... code here 
} 

hoặc sửa đổi chiến lược hiện tại của bạn:

if (ddlCustomerNumber.Items.FindByText(
    GetCustomerNumberCookie().ToString()) != null) 
{ 
    // ... code here 
} 

EDIT: Cũng có một DropDownList.Items.FindByValue hoạt động theo cách tương tự như FindByText, ngoại trừ tìm kiếm dựa trên trên các giá trị thay thế.

+0

Items.FindByText là lựa chọn tốt. Cảm ơn –

+0

Bất kỳ ý tưởng nào về sự khác biệt về hiệu suất? – MetalPhoenix

+0

'Contains' đầu tiên không hoạt động đối với tôi. Ngay cả khi mục đó tồn tại trong danh sách thả xuống 'ListItemCollection', nó vẫn đi đến điều kiện' else'. Bất kỳ ý tưởng tại sao? – doutriforce

8

Điều đó sẽ trả về một mục. Đơn giản chỉ cần thay đổi để:

if (ddlCustomerNumber.Items.FindByText(GetCustomerNumberCookie().ToString()) != null) 
    ddlCustomerNumber.SelectedIndex = 0; 
+0

Không có Count sẵn. – Justen

+0

Một tập hợp các mục hoặc một mục duy nhất? Tôi không biết asp.net nhưng Google cho rằng nó (ListItemCollection.FindByText) trả về một ListItem hoặc null? Vì vậy, = null nó sẽ là? –

+0

Xin lỗi, tôi nhận ra sai lầm của mình ngay sau khi đăng bài, nhưng dường như không phải trước khi tôi nhầm lẫn một vài người ... Tôi không chắc mình đang nghĩ gì. –

0

Bạn có thể thử kiểm tra xem phương pháp này trả về một null:

if (ddlCustomerNumber.Items.FindByText(GetCustomerNumberCookie().ToString()) != null) 
    ddlCustomerNumber.SelectedIndex = 0; 
1

gì về điều này:

ListItem match = ddlCustomerNumber.Items.FindByText(
    GetCustomerNumberCookie().ToString()); 
if (match == null) 
    ddlCustomerNumber.SelectedIndex = 0; 
//else 
// match.Selected = true; // you'll probably select that cookie value 
0

On C# làm việc này:

 if (DDLAlmacen.Items.Count > 0) 
     { 
      if (DDLAlmacen.Items.FindByValue("AlmacenDefectoAndes").Value == "AlmacenDefectoAndes") 
      { 
       DDLAlmacen.SelectedValue = "AlmacenDefectoAndes"; 
      } 
     } 

Cập nhật:

Dịch mã bên trên sang Visual Basic không hoạt động. Nó ném "System.NullReferenceException: tham chiếu đối tượng không được đặt thành một thể hiện của đối tượng .."

So. để làm việc này trên Visual Basic, tôi đã phải thay đổi mã như thế này:

 If DDLAlmacen.Items.Count > 0 Then 
      If DDLAlmacen.Items.Contains(New ListItem("AlmacenDefectoAndes")) Then 
       DDLAlmacen.SelectedValue = "AlmacenDefectoAndes" 
      End If 
     End If 
+0

'DDLAlmacen.Items.FindByValue (" AlmacenDefectoAndes ") Giá trị ==" AlmacenDefectoAndes "' nên là 'DDLAlmacen.Items.FindByValue (" AlmacenDefectoAndes ")! = Null', nếu không bạn sẽ nhận được NullReferenceException nếu nó không thể tìm thấy nhập với giá trị đó. – Trisped

4

Nếu 0 là giá trị mặc định của bạn, bạn chỉ có thể sử dụng một giao đơn giản:

ddlCustomerNumber.SelectedValue = GetCustomerNumberCookie().ToString(); 

này tự động chọn mục danh sách thích hợp, nếu DDL chứa giá trị của cookie. Nếu nó không chứa nó, cuộc gọi này sẽ không thay đổi lựa chọn, vì vậy nó sẽ ở lựa chọn mặc định. Nếu cái sau là giống như giá trị 0, thì đó là giải pháp hoàn hảo cho bạn.

Tôi sử dụng cơ chế này khá nhiều và thấy rất tiện dụng.

0

// bạn có thể sử dụng? điều hành thay vì nếu

ddlCustomerNumber.SelectedValue = ddlType.Items.FindByValue(GetCustomerNumberCookie().ToString()) != null ? GetCustomerNumberCookie().ToString() : "0"; 
0
ListItem item = ddlComputedliat1.Items.FindByText("Amt D"); 
if (item == null) { 
    ddlComputedliat1.Items.Insert(1, lblnewamountamt.Text); 
} 
0

Nếu chức năng trở lại Không có gì, bạn có thể thử dưới đây

if (ddlCustomerNumber.Items.FindByText(
    GetCustomerNumberCookie().ToString()) != Nothing) 
{ 
... 
} 
Các vấn đề liên quan