-1

私のwinFormsアプリケーションには2つのタブ(タブ1とタブ2)で構成されるタブコントロールがあります。 tab2では、データベース(製品情報)のデータグリッドビューにデータが取り込まれます。 タブ1では、ユーザーにオプションを選択させるコンボボックス[売上分析]があります。 私は今、tab2データグリッドのデータから地域の販売情報を表示する、cb選択のtab1からtab2にアクセスしたいと思っています。 出来ますか?私は本当に始めることを知らない

タブ1画像enter image description here

タブ2

enter image description here期待:

タブ1のコンボボックスが選択されている場合は、北、東、西の3つの(地域)があるタブ2のdatagridviewを見てから、売上高13、売上高14を合計してtextBoxesにそれぞれ表示する必要があります。


  • 何かにアクセスするには、参照が必要です。あなたのタブページが基本的に静的な場合は、好きなように参照を追加できます。しかし、彼らはすべて同じ形になっているので(?)、彼らはすでにお互いを見ています。だから、何もすることはない。 - TabPagesにUsercontrolが含まれている場合、これは当てはまりません。もしそうなら、質問を更新してください! - TaW
  • @TaW。最初の例は素晴らしいことです。唯一のユーザーコントロールは、comboboxselctionのために。 - James
  • 唯一のユーザーコントロールはコンボボックスですおそらくそうではありません。見るここにCustomControlsとUserControlsの違いについては、それがCustomControls(別名サブクラス)の場合は問題ありません。結局それがUserControlの場合は、プロパティを使って、フィールドを何らかの方法で公開する必要があります。 - TaW
  • 何ですかcb selection?イベント? ComboBoxのselectionChangedですか?またはCommandButton?正確で完全な質問を編集してください! - TaW
  • @TaW。 Thnx。私は今、あなたを理解しています。これはUserControlです。cb selectionコンボボックスのselectionChangedつまり、コンボボックスが選択されている場合は、北、東、西のectが売り上げ13、売り上げ14を合計しているtab2のdatagridviewを見て、それぞれtextBoxesに表示する必要があります。 - James

2 답변


0

コントロールがすべて1つのフォームにあるので、そのメソッドは、追加の助けなしに互いに参照することができます。

だからあなたはSelectedIndexChangedComboBox cbAnalyse

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

これは、小さなヘルパー関数を使用して、DataGridViewの1つの列からすべての値を合計します。

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;
}

人々はしばしば問題に遭遇します。ないいずれかの同じフォームに座っているが、第2、第3などのフォーム。または、彼らがUsercontrolこれは、コントロールを保持するためのおいしいコンテナです。

いずれの場合も、これらのコントロールは、デフォルトでは、他のFormsまたはUserObjectのプライベートメンバーです。

このような場合、通常はPropertyによって、何らかの種類のパブリックアクセサーを作成する必要があります。フォームの場合は、他のフォームへの参照を提供する必要があります。これらのフォームは、開いたときに保存されることがよくあります。

この場合、第2フォームはしばしば第1フォームへのバック・リフレクションも必要とする。これはしばしばコンストラクタで渡されます。

しかし、あなたのケースでは、これらの合併症のどれも重要ではありません。あなたが必要とするのは、これらすべてのテキストボックスを結びつけるための忍耐です;-)

更新:また、中間合計を取得する際に問題があるようで、タブ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
  • あなたの問題を解決しましたか? Alles klar? - TaW
  • こんにちは。残念ながら私はできませんでした。問題は、私が必要と思うことです。where clause私が必要とする属性を要約する。私はあなたのサンプルが列全体を合計していると思いますか?私のDVGの列sales13で、北の値は2x 800です。したがって、北の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タブ2では北、東、西のectが売り上げ13と売り上げ14を合計し、それぞれテキストボックスに表示されます。私は質問を更新しました - James
  • @ジェームス:その場合は、たとえば、データテーブルのグリッドのいくつかのデータソースを持っている必要があります。データソースからレコードを検索すると、 "地域"コンボ選択値と等しくなり、レコードを取得したら、&quot; Sales13,14&15&quot;それぞれ、 - Yogi

リンクされた質問


最近の質問