C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: Visual C#でComboBoxのデータの持たせ方


(過去ログ 128 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■76234 / inTopicNo.1)  Visual C#でComboBoxのデータの持たせ方
  
□投稿者/ ゆーきゃん (1回)-(2015/06/16(Tue) 15:57:02)

分類:[C#] 

Visual C#でComboBoxのデータの持たせ方について教えてください。

ComboBox1に「りんご・トマト・牛肉」の3つを登録したとします。

ComboBox1から「りんご・トマト・牛肉」を選択した後、
textbox1/2/3それぞれに、

textbox1(種類):果物
textbox2(値段):100円
textbox3(産地):青森

textbox1(種類):野菜
textbox2(値段):80円
textbox3(産地):千葉

textbox1(種類):肉
textbox2(値段):200円
textbox3(産地):宮城

と入力したとします。

この後、ComboBoxからリンゴ・トマト・牛肉を選択した際に
先程登録したデータが自動的にtextbox内に表示されるようプログラムを作りたいのですが、
どのようなプログラム操作が必要でしょうか。

例:Combobox1:「牛肉」を選択すると、textbox1/2/3:「肉」「200円」「宮城」と表示される。

Combobox.Dataset や Datasource など何やら使えそうなイベントを見つけたのですが、いまいち使い方が分かりませんでした。
引き続き調べてみますが、Visual C#に関しては、触り始めなので中々思うようにプログラムが組めず困っております。
どなたかお力添えお願い致します。

引用返信 編集キー/
■76235 / inTopicNo.2)  Re[1]: Visual C#でComboBoxのデータの持たせ方
□投稿者/ ぶなっぷ (26回)-(2015/06/16(Tue) 18:35:55)
ほとんど分かってなさそうな人に答えだけ教えることに意味があるか疑問ですが、
これみて動かして、どうして動くのかちゃんと考えてみてください。

環境の説明もないので、C# + WPF + XAML にて、

[XAML]
<Window x:Class="Test.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow"
        Width="525"
        Height="350">
    <StackPanel>
        <ComboBox x:Name="DataListCombobox"
                  DisplayMemberPath="Product"
                  ItemsSource="{Binding DataList}"
                  SelectedItem="{Binding SelectedData}"
                  SelectionChanged="DataListCombobox_SelectionChanged" />
        <TextBox x:Name="SelectedProduct" />
        <TextBox x:Name="SelectedPrice" />
        <TextBox x:Name="SelectedArea" />
    </StackPanel>
</Window>

[ソースコード]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace Test
{
    public struct Data
    {
        public string Product { get; set; } // 商品
        public int Price { get; set; }      // 価格
        public string Area { get; set; }    // 産地
    }
    
    /// <summary>
    /// MainWindow.xaml の相互作用ロジック
    /// </summary>
    public partial class MainWindow : Window
    {
        public List<Data> DataList { get; set; }
        public Data SelectedData { get; set; }
    
        public MainWindow()
        {
            DataList = new List<Data>
            {
                new Data { Product="果物", Price = 100, Area = "青森"},
                new Data { Product="野菜", Price = 80,  Area = "千葉"},
                new Data { Product="肉",   Price = 200, Area = "宮城"},
            };
    
            DataContext = this;
            InitializeComponent();

            DataListCombobox.SelectedIndex = 0;
        }

        private void DataListCombobox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            SelectedProduct.Text = SelectedData.Product;
            SelectedPrice.Text = SelectedData.Price.ToString();
            SelectedArea.Text = SelectedData.Area;
        }
    }
}

引用返信 編集キー/
■76238 / inTopicNo.3)  Re[1]: Visual C#でComboBoxのデータの持たせ方
□投稿者/ わくちゃん (8回)-(2015/06/16(Tue) 19:49:54)
No76234 (ゆーきゃん さん) に返信
> Visual C#でComboBoxのデータの持たせ方について教えてください。
>
> ComboBox1に「りんご・トマト・牛肉」の3つを登録したとします。
>
> ComboBox1から「りんご・トマト・牛肉」を選択した後、
> textbox1/2/3それぞれに、
>
> textbox1(種類):果物
> textbox2(値段):100円
> textbox3(産地):青森
>
> textbox1(種類):野菜
> textbox2(値段):80円
> textbox3(産地):千葉
>
> textbox1(種類):肉
> textbox2(値段):200円
> textbox3(産地):宮城
>
> と入力したとします。
>
> この後、ComboBoxからリンゴ・トマト・牛肉を選択した際に
> 先程登録したデータが自動的にtextbox内に表示されるようプログラムを作りたいのですが、
> どのようなプログラム操作が必要でしょうか。
>
> 例:Combobox1:「牛肉」を選択すると、textbox1/2/3:「肉」「200円」「宮城」と表示される。
>
> Combobox.Dataset や Datasource など何やら使えそうなイベントを見つけたのですが、いまいち使い方が分かりませんでした。
> 引き続き調べてみますが、Visual C#に関しては、触り始めなので中々思うようにプログラムが組めず困っております。
> どなたかお力添えお願い致します。
>

データバインディングでのアプローチとしては、

準備
・名前、種類、値段、産地をプロパティにもつクラスを作成する。

起動時の処理
・名前に、りんご、トマト、牛肉を設定した上記クラスのインスタンスを生成し、リストに追加する。
・BindingSourceクラスのインスタンスを生成し、DataSourceに上記リストを設定する。
・コンボボックス、テキストボックスのDataSourceに上記BindingSourceを設定する。
・コンボボックスのDisplayMemberプロパティに"名前"を設定する。
・テキストボックスのTextプロパティに種類、値段、産地をバインドする。

という感じになりますかね。
引用返信 編集キー/
■76240 / inTopicNo.4)  Re[2]: Visual C#でComboBoxのデータの持たせ方
□投稿者/ わくちゃん (9回)-(2015/06/16(Tue) 21:34:02)
No76238 (わくちゃん さん) に返信
> データバインディングでのアプローチとしては、
> 
> 準備
> ・名前、種類、値段、産地をプロパティにもつクラスを作成する。
> 
> 起動時の処理
> ・名前に、りんご、トマト、牛肉を設定した上記クラスのインスタンスを生成し、リストに追加する。
> ・BindingSourceクラスのインスタンスを生成し、DataSourceに上記リストを設定する。
> ・コンボボックス、テキストボックスのDataSourceに上記BindingSourceを設定する。
> ・コンボボックスのDisplayMemberプロパティに"名前"を設定する。
> ・テキストボックスのTextプロパティに種類、値段、産地をバインドする。
> 
> という感じになりますかね。No76238 (わくちゃん さん) に返信
> データバインディングでのアプローチとしては、
> 
> 準備
> ・名前、種類、値段、産地をプロパティにもつクラスを作成する。
> 
> 起動時の処理
> ・名前に、りんご、トマト、牛肉を設定した上記クラスのインスタンスを生成し、リストに追加する。
> ・BindingSourceクラスのインスタンスを生成し、DataSourceに上記リストを設定する。
> ・コンボボックス、テキストボックスのDataSourceに上記BindingSourceを設定する。
> ・コンボボックスのDisplayMemberプロパティに"名前"を設定する。
> ・テキストボックスのTextプロパティに種類、値段、産地をバインドする。
> 
> という感じになりますかね。

TextBoxにDataSourceというプロパティはありませんでしたね。
TextBoxには、DataBindingsプロパティにBindingオブジェクトを設定します。



WinFormのサンプルも載せておきます。

ちなみにVisualStudioであれば、BindongSourceの作成や、各プロパティ(DisplayMemberやDataBindings)は、デザイン画面から設定できます。
ですが、最初は丁寧に自分で描くことをお勧めしますね。


Productクラス
class Product
{
    public string Name
    {
        get;
        set;
    }

    public string Kind
    {
        get;
        set;
    }

    public int Price
    {
        get;
        set;
    }

    public string Locality
    {
        get;
        set;
    }

    public Product()
    {
        this.Name = "";
        this.Kind = "";
        this.Price = 0;
        this.Locality = "";
    }
}


Formクラス
public partial class Form1 : Form
{

    private List<Product> productList = new List<Product>();

    public Form1()
    {
        InitializeComponent();

        Product p;

        p = new Product();
        p.Name = "りんご";
        this.productList.Add(p);

        p = new Product();
        p.Name = "トマト";
        this.productList.Add(p);

        p = new Product();
        p.Name = "牛肉";
        this.productList.Add(p);

        BindingSource bs = new BindingSource();
        bs.DataSource = this.productList;

        this.nameComboBox.DataSource = bs;
        this.nameComboBox.DisplayMember = "Name";

        this.kindTextBox.DataBindings.Add("Text", bs, "Kind");
        this.priceTextBox.DataBindings.Add("Text", bs, "Price");
        this.localityTextBox.DataBindings.Add("Text", bs, "Locality");
           
    }
}

引用返信 編集キー/
■76242 / inTopicNo.5)  Re[3]: Visual C#でComboBoxのデータの持たせ方
□投稿者/ ゆーきゃん (3回)-(2015/06/17(Wed) 09:02:40)
皆様お答えありがとうございます。
皆様の回答を参考に一度自分でプログラムを組んでみようと思います。

>ぶなっぷ様

わざわざソースコードまで作って頂き、ありがとうございます。
開発環境は、VisualC#のWindowsフォームアプリケーションで作成する予定です。
記述なく申し訳ございませんでした。


>わくちゃん様

準備・起動時の処理を詳しく書いて頂きありがとうございました。
イメージが掴みやすくなりました。
また、DataSource・BindingSourceというイベントを使用するとの事なので、
調べて、プログラムに組み込めるよう精進致します。

引用返信 編集キー/
■76244 / inTopicNo.6)  Re[4]: Visual C#でComboBoxのデータの持たせ方
□投稿者/ くーへん (1回)-(2015/06/18(Thu) 09:35:50)
2015/06/18(Thu) 13:17:22 編集(投稿者)

No76242 (ゆーきゃん さん) に返信
> 皆様お答えありがとうございます。
> 皆様の回答を参考に一度自分でプログラムを組んでみようと思います。
>
> >ぶなっぷ様
>
> わざわざソースコードまで作って頂き、ありがとうございます。
> 開発環境は、VisualC#のWindowsフォームアプリケーションで作成する予定です。
> 記述なく申し訳ございませんでした。
>
>
> >わくちゃん様
>
> 準備・起動時の処理を詳しく書いて頂きありがとうございました。
> イメージが掴みやすくなりました。
> また、DataSource・BindingSourceというイベントを使用するとの事なので、
> 調べて、プログラムに組み込めるよう精進致します。
>

皆様、初めまして。m(_W_)m

くーへん です。

使っているのはVS2012でして、C#を始めてからまだ半年位ですので私も超初心者です。
たまたま、最近、SQL Serverからselectしてきたデータを
C#のフォーム上にある「コンボボックス」のデータとしてセットする
プログラムを書いてみたところです。
SQLサーバは使わないかもしれませんが一応動いていますのでイメージにつながればと・・> ゆーきゃん さん


private void comboBox1_Enter(object sender, EventArgs e)
{
/////////////////////////////////////////////////////////////////////////////////////////////////////////
///
///
/////////////////////////////////////////////////////////////////////////////////////////////////////////


string connectstring3 = string.Empty;

connectstring3 += "Data Source = " + G.WK_DB_SERVER_NAME + ";";
connectstring3 += "Initial Catalog = FOO;";
connectstring3 += "Integrated Security = SSPI;";

// SQL Server への接続を作成する。
SqlConnection cnnct3 = new SqlConnection(connectstring3);



string selectString3 = @"SELECT ID, WORDS FROM dbo.Word_Entity_tbl";


SqlCommand command3 = new SqlCommand(selectString3, cnnct3);

cnnct3.Open();

SqlDataReader reader3 = command3.ExecuteReader();


DataTable CMB1_SOURCE = new DataTable();

CMB1_SOURCE.Columns.Add("ID", typeof(string));
CMB1_SOURCE.Columns.Add("WORDS", typeof(string));



if (reader3.HasRows)
{

while (reader3.Read())
{

//新しい行作成
DataRow row = CMB1_SOURCE.NewRow();

//新しい行の各列にセット
row["ID"] = reader3.GetValue(0).ToString();

row["WORDS"] = reader3.GetValue(1).ToString() ;

CMB1_SOURCE.Rows.Add(row);

}

}



comboBox1.DataSource = CMB1_SOURCE;

/// 表示は文字列、取得は、ID

comboBox1.DisplayMember = "WORDS";

comboBox1.ValueMember = "ID";

comboBox1.MaxDropDownItems = 80;

reader3.Close();
cnnct3.Close();
}

以上

引用返信 編集キー/
■76267 / inTopicNo.7)  Re[5]: Visual C#でComboBoxのデータの持たせ方
□投稿者/ ゆーきゃん (4回)-(2015/06/19(Fri) 11:31:52)
>くーへん様

わざわざご丁寧にありがとうございます。
参考にさせて頂きます。

現在皆様から頂いた助言を参考にプログラムを組んでおります。
知識が0からの状態なので、なかなか上手くいかず四苦八苦していますが、
試行錯誤を繰り返しながら作業を進めております。

また何かありましたらお力添えよろしくお願い致します。


引用返信 編集キー/
■76268 / inTopicNo.8)  Re[6]: Visual C#でComboBoxのデータの持たせ方
□投稿者/ わくちゃん (11回)-(2015/06/19(Fri) 11:38:08)
No76267 (ゆーきゃん さん) に返信
> また何かありましたらお力添えよろしくお願い致します。

とりあえずキリがついたようでしたら、解決済みにしておきましょう。
引用返信 編集キー/
■76270 / inTopicNo.9)  Re[7]: Visual C#でComboBoxのデータの持たせ方
□投稿者/ ゆーきゃん (6回)-(2015/06/19(Fri) 13:17:52)
>わくちゃん様

すいません。初めて投稿したもので仕様が分かっていませんでした。
わざわざありがとうございます。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -