-1

내 winForms 응용 프로그램에는 두 개의 탭 (tab1 및 tab2)으로 구성된 탭 컨트롤이 있습니다. tab2 데이터는 데이터베이스 (제품 정보)의 datagridview에서 가져옵니다. tab1에서 나는 옵션을 선택하게하는 콤보 박스 [sales analyse]를 가지고있다. 이제는 tab2 데이터 그 리드의 데이터에서 지역 판매 정보를 표시하는 cb 선택의 tab1에서 tab2에 액세스하려고합니다. 가능한가? 나는 시작하는 것을 정말로 모른다.

탭 1 이미지enter image description here

탭 2

enter image description here기대:

tab1의 콤보 상자가 선택되면 tab2의 datagridview를 통해 북쪽, 동쪽, 서쪽의 요지가있는 tab2의 데이터를 살펴보고 판매 13, 판매 14를 합산 한 다음 textBoxes에 각각 표시해야합니다.


  • 무엇이든 액세스하려면 참조 만하면됩니다. TabPage가 기본적으로 정적 인 경우 원하는 방식으로 참조를 추가 할 수 있습니다. 그러나 그들은 모두 같은 형태로 존재하기 때문에 (?) 그들은 이미 서로를 본다. 그래서 전혀 할 것이 없다 ..! - TabPages에 Usercontrol이 포함되어있는 경우에는 그렇지 않습니다. 그렇습니까? 그렇다면 질문을 업데이트하십시오! - TaW
  • @TaW. 좋은 예가 될 것입니다. 유일한 사용자 컨트롤은combobox선거를 위해. - James
  • 유일한 사용자 컨트롤은 콤보 박스입니다.아마도 그렇지 않습니다. 만나다이리CustomControls와 UserControls의 차이점은! 그것이 CustomControls (일명 하위 클래스)이라면 아무런 문제가 없습니다. 그것은 결국 UserControl 경우 속성을 통해 최상의 방법으로 어떤 방법으로 필드를 노출해야 할 것입니다 .. - TaW
  • 무엇입니까cb selection? 이벤트? ComboBox의 selectionChanged? 또는 CommandButton ?? 질문을 정확하고 완전하게 편집하십시오 !! - TaW
  • @TaW. Thnx. 나는 지금 너를 이해하고있다. 그것은 UserControl입니다.cb selectionComboBox의 selectionChanged입니다. 즉, 콤보 상자가 선택되면 북쪽, 동쪽, 서쪽 요법이 판매 13, 판매 14 .. 인 탭 2의 datagridview를보고 텍스트 상자에 각각 표시해야합니다. - James

2 답변


0

컨트롤이 모두 하나의 폼에 있기 때문에 추가 메서드없이 메서드를 모두 참조 할 수 있습니다.

그래서 당신은SelectedIndexChanged~의ComboBox cbAnalyse

cbAnalyse_SelectedIndexChanged(object sender, EventArgs e) 
{ 
   if (cbAnalyse.SelectedItem.ToStringndex == "Sales Analysis"
   {
        someTextbox1.Text = ColumnSum(yourDataGridView, someColumn1) + "$";
        someTextbox2.Text = ColumnSum(yourDataGridView, someColumn2) + "$";
   }

이 작은 도우미 함수를 사용하여 DataGridView에서 한 열의 모든 값을 합산합니다.

decimal ColumnSum(DataGridView dgv, int columnIndex)
{
    decimal sum = 0m;
    for (int row = 0; row < DGV.Rows.Count; row++)
       if (DGV[columnIndex, row].Value != null) sum += Convert.ToDecimal(DGV[1, row].Value);
    return sum;
}

사람들은 종종 문제가되는 컨트롤을 참조해야 할 때 문제가 발생합니다.아니같은 양식에 있지만 둘째, 셋째 등 양식에 앉아. 또는 그들이Usercontrol이것은 컨트롤을 유지하기위한 커스텀 컨테이너입니다.

두 경우 모두 해당 컨트롤은 기본적으로 다른 Forms 또는 UserObject의 비공개 멤버입니다.

이 경우 일반적으로 속성에 의해 일종의 공용 접근자를 만들어야합니다. 양식의 경우 다른 양식에 대한 참조를 제공해야하며, 일반적으로 양식을 열 때 저장됩니다.

이 경우, 제 2 서식은 종종 제 1 서식에 대한 역 - 참조를 필요로합니다; 이것은 종종 생성자에서 전달됩니다.

그러나 귀하의 경우에는 이러한 합병증 중 아무 것도 중요하지 않습니다. 필요한 모든 인내심은 그 모든 TextBoxes를 연결합니다 ;-)

최신 정보:중간 합계를 얻는 데 문제가있는 것처럼 보이고 Tab 2의 행에서 반복 영역을 허용해야하는 경우 where 절로 계산할 함수를 사용하려고합니다.

decimal ColumnSumWhere(DataGridView dgv, int columnIndex, string region)
{
    decimal sum = 0m;
    for (int row = 0; row < DGV.Rows.Count; row++)
       if (DGV[columnIndex, row].Value != null) &&
          (DGV[regionColumn, row].Value.ToString() == region)
               sum += Convert.ToDecimal(DGV[1, row].Value);
    return sum;
}


  • 고마워요. 나는 당신의 제안을 확인하고 성공 여부에 대한 피드백을 줄 것이다. 내가 성공할 수 있기를 바란다. Sch & # 24; nen 태그 노크 ;-) - James
  • 문제를 해결 했습니까? 알래스카? - TaW
  • 안녕 TaW. 불행히도 나는 할 수 없었다. 문제는 내가 필요하다고 생각한다.where clause내가 필요한 애트리뷰트를 요약 해. 너의 샘플이 전체 칼럼을 합산 한 것 같아? 위로 sales12 열에있는 내 DVG로 돌아 가면 north 값은 2x 800입니다. 따라서 north shd에 대한 txtBox는 1600을 표시합니다. - James
  • sales13 열에서 north 값은 2x 800입니다. 따라서 north shd에 대한 txtBox는 1600을 표시합니다음 .. 아니야. 800 + 200 = 1000을 의미합니까? Tab2에서 행을 다시 테이핑하는 것이 맞습니까? (내 대답을 쓸 때 이것은 없었지만, 나는 믿습니다.) 그렇다면 & # 39; Tab1에? 또한 반복하지 않기를 바랍니다. ..! - TaW
  • 내 편집이 도움이되는지 확인하십시오! - TaW

0

만약 내가 맞다면, 판매 분석 콤보의 가치를 바꿀 때마다 데이터 그리드를 포함한 탭 페이지가 활성화되어야합니다. 탭 컨트롤의 선택된 인덱스를 데이터 격자 탭으로 설정할 수 있습니다.

this.tabControl1.SelectedIndex = 1;//Index of data grid tab


  • 어떤 탭 2도 활성화되어서는 안됩니다. 만약combobox가 선택되면datagridview북쪽, 동쪽, 서쪽 ect가 있고 판매 13, 판매 14를 합계하는 tab2에서. 그리고 textBoxes에 각각 표시하십시오. 내 질문을 업데이트했습니다. - James
  • @ 제임스 : 그 경우, 당신은 예를 들어, 데이터 테이블에 대한 귀하의 그리드의 일부 데이터 소스가 있어야합니다. 데이터 소스에서 & quot; 지역 & quot; 콤보 선택한 값과 같습니다. 일단 레코드를 얻으면 & quot; Sales13, 14 & 15 & quot;에서 해당 값을 찾습니다. 각기. - Yogi

연결된 질문


최근 질문