2017-08-18 6 views
0

私のコードビハインドのためにC#でプロジェクトトラッカーASP.net wbsiteを作成しています。私のデフォルトビューにはSQL Server DBを照会するGridViewがあり、そのうちの1つはProject Status(ProjStatus)で、5つのオプション(進行中、保留中、完了、延期、キャンセル済み)を持つことができます。チェックボックスを使ってプログラムでGridViewをフィルタリングする

ここで、チェックボックスリストを使用してインクリメンタルフィルタを作成する必要があります。たとえば、「進行中」のチェックボックスを選択した場合、「進行中」のプロジェクトのみを表示するだけですが、「保留中」のチェックボックスをオンにした場合は、両方を表示することができます。

私は以前は3つのステータス(進行中、保留中、完了)しか持っていませんでしたが、if文を使用して各チェックボックスの組み合わせをハードコーディングしてこの問題を解決しましたが、現在5があります。そうするには長い。私のコードビハインドでこれをプログラマチックに行うための提案はありますか?

ありがとうございました!

編集:

私は以前にラジオボタンを使用していたが、私は私の上司の要求に応じて、今日それ以前を変更しなければなりませんでした。これは、SqlDataSourceコントロール

 if (radioStatus.SelectedItem.Value == "Active") 
     { 
      SqlDataSource1.FilterExpression = "[PROJ_STATUS] = 'Active'"; 
      GridView1.DataBind(); 
     } 
     else if (radioStatus.SelectedItem.Value == "Pending") 
     { 
      SqlDataSource1.FilterExpression = "[PROJ_STATUS] = 'Pending'"; 
      GridView1.DataBind(); 
     } 
     else if (radioStatus.SelectedItem.Value == "Postponed") 
     { 
      SqlDataSource1.FilterExpression = "[PROJ_STATUS] = 'Postponed'"; 
      GridView1.DataBind(); 
     } 
     else if (radioStatus.SelectedItem.Value == "Cancelled") 
     { 
      SqlDataSource1.FilterExpression = "[PROJ_STATUS] = 'Cancelled'"; 
      GridView1.DataBind(); 
     } 
     else 
     { 
      SqlDataSource1.FilterExpression = "[PROJ_STATUS] = 'Complete'"; 
      GridView1.DataBind(); 
     } 
+0

あなたは何を試してみることができますか? – AsifAli72090

+0

私は自分のコードで編集を追加しましたが、以前はラジオボタンで実装していたソリューションでしたので、1つのオプションしか選択できなかったのでインクリメンタルフィルタリングはありませんでした。 –

+0

ここでは、チェックボックスからチェック? – AsifAli72090

答えて

0

にFilterExpressionと組み合わせて、私が以前使っていたコードだったあなたの説明は、いくつかの実装の詳細を欠いているが、ロジックはとにかく比較的類似していなければなりません。チェックボックスの数が少ない場合は、チェックボックスを適切なプロパティにマッピングせずにLinqをこのように使用することができます(コードをDRYにするために多くのプロパティを持つシナリオで)。

List<Project> allProjects = yourQuery.ToList(); // Assuming "Project" is your type 
List<Project> filteredProjects = new List<Project>(); 

if (inProgressCheckBox.IsChecked) 
    filteredProjects.AddRange(allProjects.Where(p => p.InProgress)); 
if (pendingCheckBox.IsChecked) 
    filteredProjects.AddRange(allProjects.Where(p => p.Pending)); 
if (completeCheckBox.IsChecked) 
    filteredProjects.AddRange(allProjects.Where(p => p.Complete)); 
if (postponedCheckBox.IsChecked) 
    filteredProjects.AddRange(allProjects.Where(p => p.Postponed)); 
if (cancelledCheckBox.IsChecked) 
    filteredProjects.AddRange(allProjects.Where(p => p.Cancelled)); 

filteredProjects = filteredProjects.Distinct(); 

これは最適化されていませんが、十分に機能するはずです。 filteredProjectsをグリッドのデータソースにバインドするだけです。あなたがInProgrss、保留とコンプリートが、その後InProgress,Pending,Completeよう,で区切らstring表現を作るようproject_statusのチェックボックスをチェックしていると仮定すると

0

CheckBoxList projects = (CheckBoxList)GridView1.Rows[e.RowIndex].FindControl("CheckBoxList1"); 

List<string> projectsList = new List<string>(); 

string expression = ""; 

foreach (ListItem item in projects.Items) 
{ 
    if (item.Selected) 
     projectsList.Add(item.Text); 
} 

expression = string.Join(",", projectsList); // add , inside projects (InProgress,Pending,Complete) 
関連する問題