ふらっとC#,C♯,C#(初心者用) Part37
プログラミングC# 第5版って評判どうでしょう
質問 vs2008 sqlserver2005
主キーがint型でautoIncで自動採番のDBテーブルに対して
型付データセットのTableAdapterでクエリの追加から
クエリビルダ起動してINSERT文作成すると、
INSERT文の後ろにSELECT文が作られて
WHERE (hogeID = SCOPE_IDENTITY()
って書かれてるんだけど、
クエリビルダ完了してTableAdapterに追加されたInsert文のCommandプロパティ
見てみるとSelect文が消えてるのはなぜでしょう?
そもそもクエリビルダでは自動採番されたIDを取得することはできない?
クエリビルダのどっかのオプションで、いまインサートしたデータを取得してdatasetを更新する
みたいなところにチェックをいれてるから。
>>938 名前空間が別じゃない
System.Collections
System.Collections.Generic
名前空間が別だろうと関係ない
基底クラスのメソッドと同じシグネチャを持つメソッドを定義すると警告は出る
そっちでも警告が出るのね。了解。
非ジェネリックのGetEnumratorを実装する場合は明示的実装になるのかな?
やってみりゃわかるか。
class Hoge<T> : IEnumerable<T> {
public IEnumerator<T> GetEnumerator() { ,,, }
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator(); // こうかな。なんか落ち着かない・・
}
別フォーム(Form2)からForm1に配置したDagaGridViewへ値を代入したいのですが、
現在のセルと隣のセルへ値を代入する場合はどうしたらよいのでしょうか?
get { return dataGridView1.CurrentCell.Value; }
set { dataGridView1.CurrentCell.Value = value; }
これだと、現在アクティブなセルへの代入は出来るのですが、隣のセルへの代入が出来ません。
timerが次に呼び出されるまでの残り時間を取得したいのですが、ググってもよくわかりませんでした。
どうすれば取得できるんでしょう。
タイマー起動した時にDateTime.Nowを保存しておいて、必要な時にDateTime.Nowをもう一度
取得して引き算すれば良いんじゃ?
>>960 プロパティじゃなくてメソッドにして複数の引数与えればいいじゃん?
964 :
960:2009/02/28(土) 11:28:41
get { return dataGridView1[i, ii].Value.ToString(); }
set { dataGridView1[i, ii].Value = value; }
結局動的に選択セルを受渡しでOKでした。。
パブリックフィールドにインデックスを代入させてからプロパティ呼び出しをするっていう
勝手規約を定めちゃったの?
それは良くない解決方だよ。
>>963の言う通りにした方が良いよ。
>>964みたいにするくらいならdataGridViewをパブリックに公開した方がマシだよ
意味がない
967 :
960:2009/02/28(土) 11:52:34
ダメダメ解決法なのか _| ̄|○ il||li
複数の引数をあたえるって言うと、どんな感じにするんですしょう?
968 :
965:2009/02/28(土) 11:58:42
>>967 プロパティを止めて、メソッドにするって事。メソッドの定義の仕方は分かるよね?
他の方法として、
>>966が書いているdataGridView1をパブリック公開するって方法がある。
これはdataGridView1の色々なプロパティを弄られるのがOKな場合限定の解決法。
もう一つの方法は、インデクサを使う。これは、dataGridView1[].Valueの取得、設定が
そのフォームの外部に公開する最も主要な機能である場合にだけ用いる限定的な方法。
というわけで、一つ目がお勧め。
むしろインデクサでいいじゃん
かっこインデクサ
メッソッドっていわゆる関数のことですよね?
public string DataGridViewCel
{
get { return dataGridView1[0, i].Value.ToString(); }
set { dataGridView1[0, i].Value = value; }
}
iには現在のセルのRowが入ります。
現在はこんな感じにして、別FormからDataGridViewCellに値を代入してるのですが。。
もしよろしければ、具体的なコードを教えて頂きたい。。
もうそれでいいよ
>>971 君が書いているのはプロパティ。
メソッドの書き方を勉強して。
>>971 public void SetDataGridView(int columnindex, int rowindex, string value){
dataGridView1[columnindex,rowindex].Value = value;
}
public String GetDataGridView(int columnindex, int rowindex){
return dataGridView1[columnindex,rowindex].Value.ToString();
}
public string Print{
set{Console.WriteLine(value);}
}
おおっ、これがメソッドの書き方か〜。勉強になるな〜。
いやいやいったい今まで何を勉強してきたんだ。
public byte[] Read{
get{
byte[] b=new byte[value];
stream.Read(b);
return b;
}
}
メソッド知らなくてプロパティを知ってる、
というのも何だか凄いね、どういう学習順序なんだろう。
>>979 最初にコピペしたサンプルコードに依存するのでは?
雛鳥が卵から出てきて最初に見た動く物を親だと認識するようなものですか。
すりこみ?
しょうゆう事
メソッドの中でしか使わないけど値を保持しておきたいローカル変数ってたまにありますけど、
C++ならstatic変数にしちゃえば実現できますがC#では使えません。
クラスを再利用したりする上でお行儀が悪い事はわかりますが、
こういう場合はフィールドとして持つしかないんでしょうか?
特定のメソッドだけが参照できるようなスコープにしたいです。
じゃないとクラスの属性としては相応しくないフィールドが増えたり、
無駄に変数名を考えなくちゃいけなかったり、
別のクラスを作って実現しようにもあまりにも生産性が低いと思います。
> メソッドの中でしか使わないけど値を保持しておきたいローカル変数ってたまにありますけど、
ない。
>>986 クラスから独立した関数というのは存在しないから、フィールドに持てって事だな。
VBには関数内に宣言できるStatic変数があるのだけどC++と動作が違うのでバグの元なんだな。
>>987 例えばゲームなんかだとそれぞれに独立したカウンタなんかを持たせたい時に必要です。
それすらも別クラスにわけろというなら著しく生産性が落ちまくります。
>>988 デリゲートとか拡張メソッドとかあるんだから、
追加機能として特定のメソッドだけに参照できるフィールドのような機能が追加されてもよさそうですが、
ダメな理由ってあるんですかね。
机上の理論だけのオブジェクト指向ってもう古いと思います。
続きは相談スレでどうぞ
>>986 yield return;をうまく使うとか。
>>986 そんなユーティリティクラスを作ればいいのかな?
実例があれば代価案が出せるかも
単純にパラメータにする方が適切だけと思うけどねぇ。
「たまにある」程度のことなのに著しく生産性が〜ってのもよくわからん。
>>989 >机上の理論だけのオブジェクト指向ってもう古いと思います。
つ F# これからは関数型っすよ
っ Rules
これからもビジネスルールですよ
Railsのつもりだったらそれだ
>>989 フィールドに宣言すればいいこと。
メソッド内にスタティック変数を自在に作られたりしたら後で面倒なことになる
関数スタティック変数をリセットしたいときはどうするの?インスタンスが複数のときはどうするの?
誰かほめろよ
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。