|
■No37545 (mori さん) に返信
今の文面だけで判断するに、
更新できないのはおそらくそのエラー(値が有効ではありませんエラー)が
原因ではないかと思っています。
なので、データ取得と切替に重点を置いて
VS2005 C#でサンプルを書いてみました。
汚さについてはご了承ください。。
※画面:DataGridView×1(DataGridViewComboBoxColumnが既に1つ追加された状態)
ComboBox×1
詳しい仕様がわからないまま書いてるのでどこかしら勘違いはあるかもしれません。
とりあえず※の条件下だと↓の処理でConboBoxでの切替時にエラーは出ませんでした。
---------------------------------------------------------------------------
public partial class Form1 : Form
{
// DataGridViewComboBoxColumn用テーブル
private DataTable table = new DataTable();
// DataGridView本体用テーブル
private DataTable table2 = new DataTable();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
/*テスト用データの設定*/
table.Columns.Add("C1");
table.Columns.Add("C2");
table.Columns.Add("C3");
table2.Columns.Add("Cあ");
table2.Columns.Add("Cい");
table2.Columns.Add("Cう");
table2.Columns.Add("Cえ");
GetData();
GetData2(false);
/**********************/
// Column1 = DataGridViewにくっついているDataGridViewComboBoxColumn
foreach (DataRow row in table.Rows)
{
Column1.Items.Add(row[1].ToString());
}
Column1.DataPropertyName = "Cい";
dgv.DataSource = table2;
// データ切替用コンボボックス(年にあたる)の設定
SetCombo();
}
private void comboBox1_SelectedValueChanged(object sender, EventArgs e)
{
if (comboBox1.SelectedIndex < 0)
{
return;
}
if (comboBox1.SelectedValue.ToString() == "b")
{
GetData2(true);
// 質問者さんが行った方法を踏襲
GetData4(); // ←データを取得:da.Fill(dt)にあたる処理
Column1.Items.Clear();
foreach (DataRow row in table.Rows)
{
Column1.Items.Add(row[1].ToString());
}
}
else
{
GetData2(false);
GetData();
Column1.Items.Clear();
foreach (DataRow row in table.Rows)
{
Column1.Items.Add(row[1].ToString());
}
}
dgv.DataSource = table2;
}
/*↓サンプル用の仕込み↓*/
private void SetCombo()
{
Pattern[] source = new Pattern[] { new Pattern("こっち", "a"), new Pattern("あっち", "b") };
comboBox1.DataSource = source;
comboBox1.DisplayMember = "Kanji";
comboBox1.ValueMember = "ValueStr";
}
private struct Pattern
{
private string kanji;
private string valusStr;
public Pattern(string p_kanji, string p_value)
{
kanji = p_kanji;
valusStr = p_value;
}
public string ValueStr
{
get { return valusStr; }
}
public string Kanji
{
get { return kanji; }
}
}
private void GetData()
{
table.Rows.Add("aaaa", "1", "gerger");
table.Rows.Add("bbbb", "2", "dfgver");
table.Rows.Add("cccc", "3", "ofdhjoi");
table.Rows.Add("dddd", "4", "fbgdjog");
}
private void GetData4()
{
if (table.Rows.Count > 0) table.Clear();
table.Rows.Add("eeee", "1", "gerger");
table.Rows.Add("ffff", "2", "dfgver");
table.Rows.Add("ggggg", "3", "ofdhjoi");
table.Rows.Add("hhhh", "4", "fbgdjog");
}
private void GetData2(bool getB)
{
if (table2.Rows.Count > 0) table2.Clear();
if (getB)
{
table2.Rows.Add("LLL", "4", "gerger", "b");
table2.Rows.Add("FFF", "1", "gfarga", "b");
table2.Rows.Add("HHH", "3", "oljoij", "b");
table2.Rows.Add("bbb", "3", "werewf", "b");
}
else
{
table2.Rows.Add("あああ", "1", "gerger", "a");
table2.Rows.Add("いいい", "2", "gfarga", "a");
table2.Rows.Add("かかか", "1", "oljoij", "a");
table2.Rows.Add("ききき", "3", "werewf", "a");
table2.Rows.Add("けけけ", "3", "vn jdnfou", "a");
table2.Rows.Add("こここ", "4", "ovgjnawoe", "a");
table2.Rows.Add("くくく", "2", "oiuhjr", "a");
table2.Rows.Add("ううう", "4", "lmvjrfe", "a");
table2.Rows.Add("えええ", "2", "tghbdsde", "a");
}
}
}
---------------------------------------------------------------------------
|