こんにちは、
今開発して内容は親フォームからチェックしたリストを子フォームのdatagridviewに自動的に追加したり、
チェックを外したら、子フォームのdatagridviewから登録した項目を削除すること作成しています。
親フォームからチェックした項目(データ)を子フォームの関数に渡しているのですが、子フォームのdatagridviewの更新がしなくて、データも反映されていない状況です。
どうすれば良いでしょうか。ご存知でしたら、教えてください。
どうぞよろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

>private void btn_Click(object sender, EventArgs e)


>{
> Form frm = new  WindowsFormsApplication1.frmDataTeble();
> frm.Show(this);
>}

で、作成したfrmは、btn_Click()を抜ける際に寿命が尽きます。
# 正確には「ガベージコレクション」で回収されるまで…かなぁ。
# Showメソッドで表示している(使用中)なので、表示が消えるまでは持つか。
# ただし、btn_Click()から抜けると参照する方法がない。

では…

>private void checkBox_Click(object sender, System.EventArgs e)
>{
> if (check.Checked)
> {
>  dataform.Activate();
>  dataform.DataSetting(test.txt);
> }
>}

ここのdataformはいったい何者でしょう??
btn_Click()で作成したフォームとは別のモノ(別のインスタンス)ではありませんか?


btn_Click()のイベントハンドラで、人間という型から田中さんを作成(frm)し立ち上がって貰い(Showメソッドで表示)ました。
どこか別の場所で、同じく人間という型から斉藤さんを作成(dataform)しています。
ただし、斉藤さんにはまだ寝たままの状態(Showメソッドは未実行)でいて貰います。

checkBox_Click()のイベントハンドラで斉藤さんに目覚めて(Activateメソッド実行)もらい、メモ用紙を渡し(DataSettingメソッド実行)ました。
# ただし斉藤さんは相変わらず寝転がったまま(Showメソッド未実行なまま)です。
メモ用紙をちゃんと渡したはずなのに、なぜ田中さんが持っているメモ用紙の内容が更新されないんでしょうか??

ということです。
インスタンスが別なのですから、表示されているフォーム(上の例なら田中さん)の内容は更新されません。

dataformを親フォームのコンストラクタで作成していて、親フォームのフィールドとしているのであれば、btn_Click()のイベントハンドラで「新しく作る」のが間違っています。
    • good
    • 0
この回答へのお礼

Wr5さん

 丁寧なご回答ありがとうございます。
 
 実は同じアプリケーションで、namespaceは2つになってしまい、新規作成した子フォームと親フォームはそれぞれのnamespaceとなり、アクセスするために、dataformを定義しました。

 親フォームから操作する(btn_Click()のイベントハンドラ)と、チェックしたデータを子フォームに表示するような作成したかったのです。
 やはり他の方法も考えないといけないと思います。

 どうもありがとうございます。

お礼日時:2014/09/26 14:27

どういうコードなのか、不明では指摘のしようもない。


とは思いませんか?

>親フォームからチェックした項目(データ)を子フォームの関数に渡しているのですが、子フォームのdatagridviewの更新がしなくて、データも反映されていない状況です。

子フォームはどうやって生成しています?
# あと、そのインスタンスの寿命は?

この回答への補足

ご回答ありがとうございます。

コードが長くなりますが、

(1)子フォーム作成は
private void btn_Click(object sender, EventArgs e)
{

Form frm = new  WindowsFormsApplication1.frmDataTeble();

frm.Show(this);

}




子フォームの関数
public void DataSetting(string data)
{
this.dataGridView1.EditMode =   DataGridViewEditMode.EditProgrammatically;

int com = this.dataGridView1.CurrentCell.ColumnIndex;
int row = this.dataGridView1.CurrentCell.RowIndex;




(this.dataGridView1.Rows[c.RowIndex].IsNewRow)

this.dataGridView1.InitializeLifetimeService();

if (this.dataGridView1.Rows[row].IsNewRow)
{
this.dataGridView1.BeginEdit(true);
this.dataGridView1.EditingControl.Text = "1";
this.dataGridView1.EndEdit();
this.dataGridView1[com, row].Value = data;
}


if (data != null) this.dataGridView1[com, row].Value = data;

this.dataGridView1.CurrentCell = this.dataGridView1[com, row + 1];
this.dataGridView1.Rows[row + 1].HeaderCell.Value = "No " + (this.dataGridView1.RowCount + 1);

this.dataGridView1.Invalidate();


}

親フォームから子フォームの対して、関数でアクセスします

private void checkBox_Click(object sender, System.EventArgs e)
{

if (check.Checked)
{

dataform.Activate();

dataform.DataSetting(test.txt);

}
}

この一連の動作では、エラーなく動きましたが、子フォームのデータが表示しないし、更新もしないので、
インスタンスの寿命に関して、もっと詳しく教えていただけませんか。
どうぞよろしくお願いします。

補足日時:2014/09/24 09:42
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q[C#] DataGridViewの項目名

こんにちは、honiyonです。

 VC# + .NET2を勉強しています。

 1つのフォームに2つのDataGridViewを貼り付けた場合、
 同じ名前の項目を両方に用意する事が出来ません。
 (列の編集→列の追加→非バインド列の名前項目)

 ヘッダーテキストは重複OKでも、名前は1つのフォームに対してユニークでなければならないように見えます。

 特にDBとの連携は考えておらず、データを表にして表したいだけなのですが。
 複数の表で、同じ意味の項目は同じ名前にしておきたいのです。

 解決案、代替案などありましたら、是非アドバイスをお願いします。
 宜しくお願いします(..
 

Aベストアンサー

試しにつくってみましたところ、フォームのクラスの中に以下のように宣言されています。ということは、カラムのオブジェクトはDataGridViewと独立したオブジェクトであり、リンクさせたいときはdataGridView1にAddするような形になるのだと思います。
ですので、別のDataGridViewのコントロールに追加しているのだとしても、内部的にはDataGridViewと独立したオブジェクトなので、同じ名前のものは作ることができないということのようです。
--------------------------------------------------------------
private System.Windows.Forms.DataGridView dataGridView1;
private System.Windows.Forms.DataGridViewTextBoxColumn Column1;
private System.Windows.Forms.DataGridViewTextBoxColumn Column2;
private System.Windows.Forms.DataGridView dataGridView2;

試しにつくってみましたところ、フォームのクラスの中に以下のように宣言されています。ということは、カラムのオブジェクトはDataGridViewと独立したオブジェクトであり、リンクさせたいときはdataGridView1にAddするような形になるのだと思います。
ですので、別のDataGridViewのコントロールに追加しているのだとしても、内部的にはDataGridViewと独立したオブジェクトなので、同じ名前のものは作ることができないということのようです。
--------------------------------------------------------------
...続きを読む

Qフォームの計算結果をテーブルに反映させたい

いろいろ試してやってみたのですが、VBA等がド素人の為に、応用がききません。
すみませんが、どなたか教えてください!

フォーム【社員データ(実績入力)】にテキストボックスで作った非連結の計算式があります。
「合計提案件数」コントロールソース=nz([参加賞])+nz([F賞])+nz([E賞])+nz([D賞])+nz([C賞])+nz([B賞])+nz([A賞])+nz([ア参加賞])+nz([ア提案賞])+nz([ア努力賞])+nz([アイデア賞])

それをテーブル【T社員データ】の「合計提案件数」(数値型)という場所にデータを反映させたいです。
いろいろやってみたのですが、エラーばっかりです(><)

ちなみに、このフォームは、【T社員データ】をクエリにして、職場検索をかけ、抜粋した職場のメンバーのみを、フォームで表示するようにしています。
質問内容をご理解いただけましたでしょうか。
すみませんが、宜しくお願い致します。

Aベストアンサー

1.全件(全社員、全職場)一括でやるのか
2.フォームで表示している社員だけ計算して、職場ごとも選択的に計算させるのか、職場ごとは一括でもいいのか
3.そもそも頻度は?日次、週次、月次、四半期、年次?
等々、掘り下げていくと何にドライブさせるかによるっていう感じです。
よく分かりませんが更新クエリ(Update文)を掛けるときはWhrere条件もあった方がいいかもしれませんね。
更新したい社員だけを選ぶクエリーと、合計を出すクエリ等々、やりたいことの部分的なクエリーをまずは別々に作って、SQLビューでどういう文になるか見て、序々に組み合わせていくってしていけばなんとか思うようなSQL文が書けるのではないかと思いますよ。
がんばってください。

Qフォームの入力時の項目切替について

メールフォームを作っているのですが、以下の機能が出来るかお伺いしたく質問させていただきます。

フォーム入力欄にて
・変更項目:「1」・「2」・「3」・「4」
・名前:
・郵便番号:
・住所:
・メールアドレス:
・備考:
上記の普通のフォームがあるとして、一番最初の変更項目にて
「1」を選択した場合には、その下にある→変更項目、名前、郵便番号、住所、備考の入力ボックスのみ残し他のメールアドレス入力欄は未表示にする。
また、変更項目欄にて「2」を選択した場合には→変更項目、名前、備考の入力ボックスのみ残し他の郵便番号、住所入力欄は未表示にする。

と言ったような事を行ないたいと考えております。

要は、フォームで各種変更依頼なるものを作成し、会員であるお客様に対し変更項目の内容を入力していただこうとしています。
ですが、変更項目毎にフォームを作るのも可能ですが、どうせなら1つのフォームで処理できるのであればと考えました。
また、お客様にとって初めに変更項目を選択していただき残りの入力欄は必要箇所だけ残っていれば、少々親切かな?とも考えております。

スクリプトが分かれば良いのですが、色々と検索してみても発見できなかったので質問させていただきました。
参考URLがあれば教えていただくだけでも結構ですし、スクリプトがあるようでしたら宜しくお願いいたします。

メールフォームを作っているのですが、以下の機能が出来るかお伺いしたく質問させていただきます。

フォーム入力欄にて
・変更項目:「1」・「2」・「3」・「4」
・名前:
・郵便番号:
・住所:
・メールアドレス:
・備考:
上記の普通のフォームがあるとして、一番最初の変更項目にて
「1」を選択した場合には、その下にある→変更項目、名前、郵便番号、住所、備考の入力ボックスのみ残し他のメールアドレス入力欄は未表示にする。
また、変更項目欄にて「2」を選択した場合には→変更項目、...続きを読む

Aベストアンサー

#1です。

>フォームの欄はDLを使用した模擬?テーブルレイアウト
と、いわれても具体的な事がわからないので勝手にフォームとしてそれらしい形(fieldsetで分類)でサンプルを書きました。

要は、四つの変更項目をまとめた部分にonclickを
各項目にはidを付けてあればHTML部分はあまり関係ないので適当にアレンジするなり、これにスタイルを付けて希望の形にするなりしてください。

<html>
<head>
<title></title>
<script type="text/javascript">
window.onload=sample;
function sample(){
// 切り替える項目(id)
var id_list = 'tel postno addr mail pass';
// checkboxとの関係
var setting = {
'f_addr':['tel','postno','addr'],
'f_tel':['tel'],
'f_mail':['mail'],
'f_pass':['pass']
}

var items = new Object;
var ids = id_list.split(' ');
for(var i=0;ids[i];i++)items[ids[i]] = false;
for(var x in setting)
if(document.getElementById(x).checked)
for(var i=0;setting[x][i];i++)
items[setting[x][i]] = true;
for(var x in items) {
var Item = document.getElementById(x);
Item.disabled = ! items[x];
Item.style.visibility = (items[x])?'':'hidden';
}
}
</script>
</head>
<body>

<form>
<fieldset><legend>お客様のID・お名前</legend>
<label for="id">会員ID</label><input type="text" name="id" id="id">
<label for="name">お名前</label><input type="text" name="name" id="name">
</fieldset>
<fieldset onclick="sample()">
<legend>変更する項目</legend>
<label for="f_addr">(1)お届け先住所の変更</label><input type="checkbox" name="f_addr" value="1" id="f_addr">
<label for="f_tel">(2)お電話番号の変更</label><input type="checkbox" name="f_tel" value="2" id="f_tel">
<label for="f_mail">(3)メールアドレスの変更</label><input type="checkbox" name="f_mail" value="3" id="f_mail">
<label for="f_pass">(4)会員パスワードの変更</label><input type="checkbox" name="f_pass" value="4" id="f_pass">
</fieldset>
<fieldset><legend>変更内容</legend>
<ul>
<li><label for="tel">新お電話番号</label><input type="text" name="tel" id="tel"></li>
<li><label for="postno">郵便番号</label><input type="text" name="postno" id="postno"></li>
<li><label for="addr">新ご住所</label><input type="text" name="addr" id="addr"></li>
<li><label for="mail">メールアドレス</label><input type="text" name="mail" id="mail"></li>
<li><label for="pass">会員パスワード</label><input type="text" name="pass" id="pass"></li>
</ul>
</fieldset>
<fieldset><legend><label for="comment">備考</label></legend>
<textarea name="comment" id="comment"></textarea>
</fieldset>
</form>

</body>
</html>

#1です。

>フォームの欄はDLを使用した模擬?テーブルレイアウト
と、いわれても具体的な事がわからないので勝手にフォームとしてそれらしい形(fieldsetで分類)でサンプルを書きました。

要は、四つの変更項目をまとめた部分にonclickを
各項目にはidを付けてあればHTML部分はあまり関係ないので適当にアレンジするなり、これにスタイルを付けて希望の形にするなりしてください。

<html>
<head>
<title></title>
<script type="text/javascript">
window.onload=sample;
function sample(){
/...続きを読む

Qフォーム入力⇒テンプレに反映しテキストとして出力

(1)フォームに入力
例:
名 前【  】⇒$name
年 齢【  】⇒$age
血液型【  】⇒$blood


(2)テンプレートに当てる
テンプレ1
名 前は $name
年 齢は $age 歳です
血液型は $blood 型です

テンプレ2
私は $age 歳で$blood 型


テンプレ3
$nameは$blood 型です。


(3)テキストとして出力

テンプレ1.txt
テンプレ2.txt
テンプレ3.txt

この流れを作りたいのですが、エクセルVBAでできますか?
他にC#などでないと作れない場合は、どのようなサイトを参考にしたらよろしいでしょうか?

Aベストアンサー

詳細書かれていないので概略だけですが。

テンプレートのシートを作成して、ユーザーフォームを作成し
フォームのコードで各シートの各文字列($name等)を置換(Replace)しながら変数に格納して
シート名のテキストファイル形式で変数の内容を出力すればいいだけでは?

以下は適当に参照願います。

▼VBAの作成方法
https://www.google.co.jp/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=vba%20excel%20%e3%82%b3%e3%83%bc%e3%83%89%e3%81%ae%e4%bd%9c%e6%88%90&_sfl=function%20()%7Bvar%20a
▼ユーザーフォームの作り方
http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_080.html
▼テキストファイルの出力
http://www.excel-vba.net/excel-file-004.html
▼フォルダ指定ダイアログ(出力フォルダの指定)
http://officetanaka.net/excel/vba/tips/tips39.htm

詳細書かれていないので概略だけですが。

テンプレートのシートを作成して、ユーザーフォームを作成し
フォームのコードで各シートの各文字列($name等)を置換(Replace)しながら変数に格納して
シート名のテキストファイル形式で変数の内容を出力すればいいだけでは?

以下は適当に参照願います。

▼VBAの作成方法
https://www.google.co.jp/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=vba%20excel%20%e3%82%b3%e3%83%bc%e3%83%89%e3%81%ae%e4%bd%9c%e6%88%90&_sfl=function%20()%7Bvar%20a
▼ユ...続きを読む

QACCESS2003:サブフォームに他のテーブルの項目を表示

ACCESS2003:サブフォームに他のテーブルの項目を表示

現在メインフォームの中にサブフォームを組み込んでいます。

[前提条件]
※1 サブフォームの参照テーブルを仮にテストテーブルとします。
※2 サブフォームの項目をA,B,C,Dの4項目とします。
※3 テスト1テーブルの項目はA,B,Cの3項目とします。
※3 テスト2テーブルの項目はA,D,Eの3項目とします。

その場合、A,B,Cはテスト1テーブルの内容をそのまま表示するので問題ないのですが、
D,Eの項目はテストテーブルに存在しないので、Aをキーにしてテスト2テーブルから
データを取得して表示したいのです。

初歩的な質問で申しわけありませんが、ご回答を宜しくお願いします。

Aベストアンサー

テスト1テーブルとテスト2テーブルをクエリで連結して、それをサブフォームで表示すればいいのでは?


人気Q&Aランキング

おすすめ情報