2017-04-06 14 views
0

저는 며칠 동안이 질문에 어려움을 겪어 왔지만 아직 답변을 찾지 못했습니다. 내가 저장 프로 시저에서 동적으로 채워지는 ToolStripMenu 배열 생성 : 체크 기본적으로Dataagridview 필터링에 목록 콘텐츠 사용 C#

ToolStripMenuItem[] itemsDepto = null; 
itemsDepto = new ToolStripMenuItem[data.Tables[0].Rows.Count]; 
for (int i = 0; i <= data.Tables[0].Rows.Count - 1; i++) 
{ 
    itemsDepto[i] = new ToolStripMenuItem(); 
    itemsDepto[i].Tag = data.Tables[0].Rows[i].ItemArray[0]; 
    itemsDepto[i].Text = data.Tables[0].Rows[i].ItemArray[1].ToString(); 
    itemsDepto[i].CheckOnClick = true; 
    itemsDepto[i].Checked = true; 
    itemsDepto[i].Click += DeptoFilter_Click; 
    deptoList.Add(data.Tables[0].Rows[i].ItemArray[1].ToString()); 
} 
tsmiDepartamento.DropDownItems.AddRange(itemsDepto); 

그리고 제가 사용자에 대한 필터 컨트롤로이 ToolStripMenu을 사용하는 것입니다 달성하기 위해 노력하고있어를, 그래서 때 사용자의 선택 취소를 메뉴를 선택하지 않으면 내용이 선택되지 않은 행을 필터링해야합니다.

private void DeptoFilter_Click(object sender, EventArgs e) 
{ 
    ToolStripMenuItem temp = new ToolStripMenuItem(); 
    temp = (ToolStripMenuItem)sender; 
    BindingSource bind = new BindingSource(); 
    bind.DataSource = dgvPersonalTotal.DataSource; 
    if (temp.CheckState == CheckState.Checked) 
    { 
     deptoList.Add(sender.ToString()); 
    } 
    else 
    { 
     deptoList.Remove(sender.ToString()); 
    } 
    bind.Filter = "Departamento NOT IN (" + /*LIST*/"" + ")"; 
    dgvPersonalTotal.DataSource = bind; 
    //foreach (string x in deptoList) 
    //{ 
    //} 
} 

하지만 큰 문제 I : 내가 추가하고 다음 예에서 볼 수있는 메뉴 버튼의 상태에 따라 목록에서 값을 제거 클릭 이벤트에서

당신이 코드에서 볼 수 있듯이 목록을 사용하여 Binding Source를 필터링하는 방법은 무엇입니까? 목록을 사용하거나 foreach에서 BindingSource.Filter를 사용해 볼 수는 없습니다. 어떻게 해야할지 모르겠습니다. 이 문제를 해결하십시오, 그래서 어떤 생각을 잘 부탁드립니다.

+0

deptoList의 유형은 무엇입니까? – Alon

+0

목록 deptoList = 새 목록 (); – cyberac75

답변

0
bind.Filter = "Departamento NOT IN (" + string.Join(",", deptoList.ToArray()) + ")"; 
+0

이 아이디어는 저에게 큰 도움이되었습니다. bind.Filter = "Departamento IN ("+ string.Join (","deptoList.Select (x => " '"+ x + "'")) + ")" – cyberac75

+0

나는 투표 할 수 없다. 그러나 나는 당신에게 정답을 줄 것이다. 그러나이 코드를 사용하고자하는 사람은 이것이 정답이 아니라는 것을 알아야한다. 그러면 다음과 같이 코드가 충돌하게 될 것이다. 예외 : Throw 예외 : 'System.Data.SyntaxErrorException'System.Data.dll에서 위의 주석에 게시 된 답변을 사용하십시오 – cyberac75