- todo
- ぬし
- 会議室デビュー日: 2003/07/23
- 投稿数: 682
|
投稿日時: 2004-10-26 20:08
複数のcheckboxをonにした場合、意図通り動きますか?
|
- ZEN73
- 常連さん
- 会議室デビュー日: 2003/03/10
- 投稿数: 43
|
投稿日時: 2004-10-27 06:45
| 引用: |
|
todoさんの書き込み (2004-10-26 20:08) より:
複数のcheckboxをonにした場合、意図通り動きますか?
|
試してみたところ,ご指摘のように意図通りには動いてくれませんでした。それにいくつかの課題も明らかになりました。以下は,状況説明のために,
「住所録テーブル/フィールド」
<生徒ID><番号><入学年度><年><組><No><氏名><フリガナ><性>
「選択したデータセット」
<生徒ID><番号><年><組><No><氏名><フリガナ><性>
「DataGridに表示する列」
<番号><年><組><No><氏名><フリガナ><性>
「1から7のCheckBoxのText」
<番号><年><組><No><氏名><フリガナ><性>
デザイン時に,すべてのCheckBoxをオンにしてあります。
≪不具合@≫
1 「年」をオフにすると,
<番号><組><No><氏名><フリガナ><性>
2 1に続けて「組」をオフにすると,
<番号><組><氏名><フリガナ><性>
≪不具合A≫
1 「性」をオフにしてから,他のいずれかをオフにすると,
次のエラーが生じます。
'System.IndexOutOfRangeException' のハンドルされていない例外が
system.data.dll で発生しました。
追加情報 : 列 8 が見つかりません。
≪@への対処策≫
NAL-6295さんに教えていただいた,
obj.Columns.Remove(DataColumnオブジェクト)
と,することでうまく行くような気がしています。
≪Aへの対処策≫
if文をもう少し厳密にしなければと思ってます。
≪新たな課題≫
2つのComboBoxで,学年と組を抽出しますがCheckBoxのオン/オフのあとでは,
うまく機能してくれません。
dataGrid1.DataSource = dtMeibo;
これの切り替えをするのかな?と思ってますが,対策は全くなし!。勉強のしなきゃ。
アドバイスお待ちしています。
| コード: |
|
private void cmbNen_TextChanged(object sender, System.EventArgs e)
{
DataRead();
}
private void cmbKumi_TextChanged(object sender, System.EventArgs e)
{
DataRead();
}
private void DataRead()
{
string Nen, Kumi;
Nen = cmbNen.Text.Substring(0,1);
Kumi = cmbKumi.Text.Substring(0,1);
dsMeibo1.Clear();
odaMeibo.SelectCommand.Parameters["年"].Value = Nen;
odaMeibo.SelectCommand.Parameters["組"].Value = Kumi;
odaMeibo.Fill(dsMeibo1, "生徒名簿");
}
|
|
- とっと
- 大ベテラン
- 会議室デビュー日: 2004/03/25
- 投稿数: 197
|
投稿日時: 2004-10-27 08:33
おはようございます。
チェックボックスがチェックされる度にDataTableの列を削除したり、DataTableをコピーしたり、という方向でされているところに水を差すようですが・・。
もし僕なら、列の表示・表示だけならDataGridTableStyleを使用します。
DataGridTableStyleなら列の幅やヘッダーのテキストなんかも簡単に設定できますし・・。
最初に元になるデータを呼出して、DataGridにDataGridTableStyleを適用して、
チェックボックスがチェックされたらDataGridTableStyleでその列の列幅を0にします。
チェックを外すと元に戻す。実際に僕はこの方法をやってます。DataGridの横幅が限られて、
全ての列を表示するとデザイン的に無理があるので、普段は隠しておいて(列幅を0にして)
チェックボックスをチェックした時だけその列を表示しています。
で、エクスポートする時だけ元になったDataTableをチェックボックスでチェックされた列
のデータのみを別のDataTableにコピーして、それをエクスポートの元ソースにするとか・。
まあ、わざわざコピーしなくてもいいかもしれませんが・・。
|
- NAL-6295
- ぬし
- 会議室デビュー日: 2003/01/26
- 投稿数: 966
- お住まい・勤務地: 東京
|
投稿日時: 2004-10-27 09:43
NAL-6295です。
| 引用: |
|
もし僕なら、列の表示・表示だけならDataGridTableStyleを使用します。
DataGridTableStyleなら列の幅やヘッダーのテキストなんかも簡単に設定できますし・・。
最初に元になるデータを呼出して、DataGridにDataGridTableStyleを適用して、
チェックボックスがチェックされたらDataGridTableStyleでその列の列幅を0にします。
|
実はDataGridTableStyleを用いた場合でも、DataGridTableStyle中のGridColumnStyleに割り当てられた項目が存在しないと自動的に非表示になります。
で、その件については、かなり前のレスで説明済みであり、当初列幅を0にする方法での解決は求めていないという事でした。
#一応、状況説明だけ・・・
_________________ 「伝える」とは「人に云う」と書く。
http://d.hatena.ne.jp/NAL-6295/
|
- とっと
- 大ベテラン
- 会議室デビュー日: 2004/03/25
- 投稿数: 197
|
投稿日時: 2004-10-27 10:00
| 引用: |
|
NAL-6295さんの書き込み (2004-10-27 09:43) より:
実はDataGridTableStyleを用いた場合でも、DataGridTableStyle中のGridColumnStyleに割り当てられた項目が存在しないと自動的に非表示になります。
で、その件については、かなり前のレスで説明済みであり、当初列幅を0にする方法での解決は求めていないという事でした。
|
こんにちは。
もちろんGridColumnStyleに割り当てられた項目が存在する事が前提で、最初に一度だけDataTableの作成と列の定義を行い、チェックボックスのOn/Offで列の削除等は行わない
事を前提でのご提案です。
>当初列幅を0にする方法での解決は求めていないという事でした。
それは僕は知りませんでした・・。僕もこの方がお考えになる方法で解決されれば、
と思っていますので、ちょっとした提案でした^^
[ メッセージ編集済み 編集者: とっと 編集日時 2004-10-27 10:01 ]
|
- ZEN73
- 常連さん
- 会議室デビュー日: 2003/03/10
- 投稿数: 43
|
投稿日時: 2004-10-27 17:12
ZEN73です。
すべてがうまくいきました。ComboBoxでの学年・組の抽出にもきちんと動作しています。
NAL-6295さん,とっとさん,todoさん,ありがとうございました。
特にNAL-6295さんの私の質問に対する即座のアドバイスがなければ,ここまで考え続けることはなかったと思います。これからもよろしくお願いします。
| 引用: |
|
とっとさんの書き込み (2004-10-27 08:33) より:
もし僕なら、列の表示・表示だけならDataGridTableStyleを使用します。
DataGridTableStyleなら列の幅やヘッダーのテキストなんかも簡単に設定できますし・・。
|
| 引用: |
|
NAL-6295さんの書き込み (2004-10-27 09:43) より:
実はDataGridTableStyleを用いた場合でも、DataGridTableStyle中のGridColumnStyleに割り当てられた項目が存在しないと自動的に非表示になります。
|
実は,「SQL読み込み」へのこだわりをずうっと持っていたのですが,今まで教えていただいた方法での「抽出」への対応が完全にお手上げ状態になたことで,NAL-6295さんがご指摘のDataGridTableStyle中のGridColumnStyleをいじってみたところ,何とか形にすることができました。
課題はここからExcelへのエクスポートがうまくいくかどうかです。
| コード: |
|
private void arrayCBox_ChekedChanged(object sender, EventArgs e)
{
string str;
str = ((System.Windows.Forms.CheckBox) sender).Text;
switch(str)
{
case "番号" : str="生徒No"; break;
case "年" : str="年"; break;
case "組" : str="組"; break;
case "No" : str="番号"; break;
case "氏名" : str="氏名"; break;
case "フリガナ": str="フリガナ"; break;
case "性" : str="性別"; break;
}
CBoxText = str;
SQL_String();
}
private void SQL_String()
{
string[] ColName;
string Select = "";
dataGrid1.TableStyles.Clear();
DataGridTableStyle tsMeibo = new DataGridTableStyle();
tsMeibo.MappingName = "生徒名簿";
ColName = new string[8];
if(checkBox1.Checked)
{
ColName[1] = ",生徒No ";
DataGridColumnStyle TextCol11 = new DataGridTextBoxColumn();
TextCol11.MappingName = "生徒No";
TextCol11.HeaderText = "番号";
TextCol11.Width = 34;
TextCol11.Alignment = HorizontalAlignment.Center;
TextCol11.NullText = "";
tsMeibo.GridColumnStyles.Add(TextCol11);
}
else
ColName[1] = "";
if(checkBox2.Checked)
{
ColName[2] = ",年 ";
DataGridColumnStyle TextCol12 = new DataGridTextBoxColumn();
TextCol12.MappingName = "年";
TextCol12.HeaderText = "年";
TextCol12.Width = 18;
TextCol12.Alignment = HorizontalAlignment.Center;
TextCol12.NullText = "";
tsMeibo.GridColumnStyles.Add(TextCol12);
}
else
ColName[2] = "";
………
if(checkBox7.Checked)
{
ColName[7] = ",性別";
DataGridColumnStyle TextCol17 = new DataGridTextBoxColumn();
TextCol17.MappingName = "性別";
TextCol17.HeaderText = "性";
TextCol17.Width = 22;
TextCol17.Alignment = HorizontalAlignment.Center;
TextCol17.NullText = "";
tsMeibo.GridColumnStyles.Add(TextCol17);
}
else
ColName[7] = "";
dataGrid1.TableStyles.Add(tsMeibo);
for(int i=1; i<8; i++)
{
Select += ColName[i];
}
this.oleDbSelectCommand1.CommandText = "SELECT 生徒ID" + Select +
" FROM 生徒名簿 WHERE (年 = ?) AND (組 = ?) ORDER BY 生徒No";
DataRead();
}
|
|