[seasar-dotnet:862] Re: ユーザーコントロールのDataGridView+DataSourceの挙動について

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2008年 6月 5日 (木) 13:36:57 JST


小谷様 藤井様

いつもお世話になっております。
山下です。

藤井さんから頂いておりました、質問の回等もふまえて、
流れを説明させて頂きます。

1.ユーザーコントロール内で、DataGridViewを作成
 DataGridView内の列にヘッダー名(氏名)、name属性を[name]を作成

2.ユーザーコントロールのコードでアクセッサを作成

  public string Name { get; set; }

2.バインドしたいDTOを作成
 プロパティにnameとkanaを作成

3.他のフォームから作成したユーザーコントロールを利用し、
 DataSourceでバインドする。
 既存の列に追加する形で、nameとkanaが追加される
 |氏名|name|kana|
  |    |山下|やました|
 DTOの数だけ行が表示されている。

と、いった状態になっております。

2で何故、アクセッサを記述したかというと、
ユーザーコントロール内TextBoxに、バインドさせようとすると、
アクセッサがなければ、正常に動作しませんでした。

public string TxtEmail {
  get { return this.txtEmail.TEXT; }
  set { this.txtEmail.TEXT = value; }
}

そこで、同じようにDataGridViewの列に対してアクセッサを追加しようと
思ったのですが、書き方がわからずにおります。

public string TxtName {
  get { return ここにどう書いたらいいかわからない; }
  set { ここにどう書いたらいいかわからない = value; }
}

小谷さんより、アドバイスをいただきましたAutoGenerateColumnsをつけると、
確かに、列は追加されなくなりましたが、やはりバインドは行われず、
DTOの数だけ行数が表示されるといった表示方法になってしまいました。

お手数をおかけしますが、宜しくお願い致します。

山下 真理






----- Original Message ----- 
送信者: koyak<[E-MAIL ADDRESS DELETED]>
宛先: [E-MAIL ADDRESS DELETED]
日付:Thursday, June, 05, 2008, 12:16 AM
件名: [seasar-dotnet:861] Re:ユーザーコントロールのDataGridView+DataSourceの挙動について

> 
> 
> 山下様
> 
> 小谷です。
> 
> ・・・て、既に藤井さんが回答されていますね(^^;
> 
> 勇み足かもしれませんが、
> 以下は、問題が藤井さんの仮定通りだった場合の話です。
> 
> もしかするとDataGridViewコントロールの
> AutoGenerateColumnsというプロパティの設定が
> 関係しているかもしれません。
> 
> このプロパティは
> DataSource、またはDataMemberに応じて列を
> 自動で生成します。
> 
> http://msdn.microsoft.com/ja-jp/library/system.windows.forms.datagridview.autogeneratecolu
mns(VS.80).aspx
> 
> このプロパティをfalseにしておけば、
> DataGridViewの列がもつDataPropertyNameと
> DataSource内のデータがもつプロパティがバインドされて
> 表示されるはずです。
> (ただし、列が自動で生成されなくなるので予めDataGridViewに
> デザイナなりコードなりで列を作っておく必要があります。)
> (自分の環境では確認できました)
> 
> また、このAutoGenerateColumnsプロパティは
> VisualStudioのデザイナ上で表示されるプロパティ一覧には
> 表示されていないようです。
> そのため、設定するにはコード上で行う必要があるかと思います。
> 
> 2008/06/05 0:09 Hiroaki Fujii <[E-MAIL ADDRESS DELETED]>:
> > 山下さん。
> >
> > 藤井です。
> > ちょっと調査してみたいのですが、今ひとつイメージができておりませんので、
> > 下記の通りでよいか、教えてください。
> >
> > DataGridViewにA列がある。
> > そのDataGridViewにバインドしたいDTOにはAとBのプロパティがある。
> > このDTOのListか配列かをDataGridViewにバインドすると、DataGridViewには
> > A列だけではなくB列も追加され、DTOの数だけ行が表示されている。
> >
> > こんな感じでしょうか?
> >
> >
> > [E-MAIL ADDRESS DELETED] さんは書きました:
> >> いつもお世話になっております。
> >> 山下です。
> >>
> >> S2Continer.NET 1.3.9
> >> Quill 1.3.9
> >> Visual Studio C# 2008 Express Edition
> >>
> >> を利用しております。
> >>
> >> ユーザーコントロール内で、DataGridViewを作成し、
> >> その中、DataGridViewに対して、S2FormのDataSourceを
> >> 利用して、DataGridViewの特定の列とDataSourceの特定の
> >> 値をバインドさせたいと考えております。
> >>
> >> ユーザーコントロール内のDataGridViewとDataSourceは、
> >> バインドできており、列が作成され表示されるのですが、
> >> 既存にある列に対してのバインドがわかりません。
> >>
> >> ユーザーコントロール内のデータをバインドさせるには、
> >> ユーザーコントロール内で、アクセッサを利用しなければ
> >> いけないと思いますが、DataGridViewの特定の列に対する
> >> アクセッサの記述方法がわからず困っております。
> >>
> >> 行おうとしていること自体が、不可能かもしれませんが、
> >> お手数をご教授いただけるとありがたい次第です。
> >>
> >> ご迷惑をおかけしますが、よろしくお願いいたします。
> >>
> >> 山下 真理
> >>
> >> _______________________________________________
> >> seasar-dotnet mailing list
> >> [E-MAIL ADDRESS DELETED]
> >> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
> >>
> >
> > _______________________________________________
> > seasar-dotnet mailing list
> > [E-MAIL ADDRESS DELETED]
> > https://ml.seasar.org/mailman/listinfo/seasar-dotnet
> >
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
> 


seasar-dotnet メーリングリストの案内