DOBON.NET DOBON.NETプログラミング掲示板過去ログ

一覧表示方法

  • 題名: 一覧表示方法
  • 著者: hide
  • 日時: 2004/07/15 21:04:34
  • ID: 4884
  • この記事の返信元:
    • (なし)
  • この記事への返信:
  • ツリーを表示
環境/言語:[Windows2000]
分類:[.NET]

 お世話になります。
SQLからデータを読み込み一覧を表示します。複数行選択したり、ある列は内容修正したり、行間や見出しなど見栄えも良くしたいです。
ListBoxは、そこそこ出来ることが分かってきたのですが、やはりListViewなどを使った方がよろしいのでしょうか?一応試してみたりしていますが、決断が出来ません。
 安易に回答を求めて申し訳ないですが、よろしくお願い致します。
>  お世話になります。
> SQLからデータを読み込み一覧を表示します。複数行選択したり、ある列は内容修正したり、行間や見出しなど見栄えも良くしたいです。
> ListBoxは、そこそこ出来ることが分かってきたのですが、やはりListViewなどを使った方がよろしいのでしょうか?一応試してみたりしていますが、決断が出来ません。
>  安易に回答を求めて申し訳ないですが、よろしくお願い致します。

一行に対して複数の項目を表示したいのであれば、ListViewをお勧めします。
編集に関しては、一覧表示上で直接編集したいのであれば、DataGridでしょうね。

個人的には、キーとなるいくつかの項目をListViewで一覧表示。
ListViewの一行を選択したら、
その行の編集可能な項目をtextボックス等で表示、
編集不可項目はlabelで表示。
という風にすると、見やすいのではないかと思います。

画面から編集を行わせる場合、
DataGridを使うと編集した行としてない行の区別が難しいので、
僕のお勧めはListView選択→一行分のデータのみ編集。
というほうがわかりやすいとは思います。
レスありがとうございます。
今まで、ListBoxと書いていたところを、ListViewでやってみて思ったのですが、ListViewとは、ワク全体に該当データが全部表示されるもの、ととらえてよろしいのでしょうか?HELP見てもそんな感じです。私は、ListViewとは、ListBoxがいろいろ編集できるのになったモノくらいに考えていました・・・。
私がやりたいのは、データの一覧が縦にズーッと並ぶ方法なので、ListBoxかDatagridなのでしょうか?
本当に基本的なことで申し訳ありませんが、よろしくお願い致します。
hideさん、こんにちは。
> レスありがとうございます。
> 今まで、ListBoxと書いていたところを、ListViewでやってみて思ったのですが、ListViewとは、ワク全体に該当データが全部表示されるもの、ととらえてよろしいのでしょうか?HELP見てもそんな感じです。私は、ListViewとは、ListBoxがいろいろ編集できるのになったモノくらいに考えていました・・・。

見た目としては、スクロールバーが表示されますので、DataGridに近いイメージになりますよ。
ListViewは以前のVSコモンコントロールで例えると、FlexGridみたいな感じでしょうかね…

> 私がやりたいのは、データの一覧が縦にズーッと並ぶ方法なので、ListBoxかDatagridなのでしょうか?

データの一覧が縦に並ぶとは、どういった事なのでしょうか?
もしかして、横に並べない…って事ですか?横に並べれますので安心してください。
あ、勘違いだったら、すいません。

ちなみに、私は、SHさんが述べているやり方が好きなので、DataGridは使用していません。だって、コードでの制御が面倒くさいしね(-_-;)
hideさん、こんにちは。

>>私がやりたいのは、データの一覧が縦にズーッと並ぶ方法なので、ListBoxかDatagridなのでしょうか?

ListViewは、Viewプロパティによって見せ方が変わります。
ちなみに、"Detail"にすると、
見た目はDataGridのようになりますよ。
ちなみに僕はコレを良く使います。

> ちなみに、私は、SHさんが述べているやり方が好きなので、DataGridは使用していません。だって、コードでの制御が面倒くさいしね(-_-;)

ですよね^^;
DataGridはコードで制御するのが面倒ですよね。
一覧上で編集できちゃうので、
どの行を編集したのかわからない状況になったりもしますし。。
  • 題名: Re[4]: 一覧表示方法
  • 著者: hide
  • 日時: 2004/07/20 14:52:12
  • ID: 4943
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
ぺがらぼさん、レスありがとうございます!
>
> データの一覧が縦に並ぶとは、どういった事なのでしょうか?
1行に1レコードで、縦に並んだものです。

>横に並べれますので安心してください。
プロパティはどうすればいいのでしょうか?Aligenmentがそれっぽいのでやってみましたが、違うみたいだし・・・。
>
また、ある列の内容を修正するには、やはりSHさんが述べられているやり方が一番分かり安そうです。Datagridはもう、分かりません・・・。

よろしくお願い致します。
SHさん、レスありがとうございます!

ListViewは、Viewプロパティを"Detail"にしました。
で、一番上の行が灰色になりました。
Do While reader.Read()
ListView1.Items.Add(No, 1)
・・・・
Loop
と記述しているのですが、データが何も表示されません。
申し訳ありません、お願い致します。
hideさん、こんにちは。

> Do While reader.Read()
> ListView1.Items.Add(No, 1)
> ・・・・
> Loop
> と記述しているのですが、データが何も表示されません。
> 申し訳ありません、お願い致します。

例を記述しますね
'ヘッダ設定
with ListView1
 'カラムの追加
 .Columns.Clear() '一応、クリアしておく
 .Columns.Add("会社コード", 200, HorizontalAlignment.Left)
 .Columns.Add("会社名", 400, HorizontalAlignment.Left)
 .Columns.Add("住所", COL_WIDTH6, HorizontalAlignment.Left)
end with

'データ取得
(この部分は省略します)

'データ貼り付け
With ListView1
 .BeginUpdate() 'ちらつきを抑えるために、BeginUpdate()を呼ぶ。
 .Items.Clear() 'ListViewItems をクリアする。
 For i As Integer = 0 To <データ数 - 1>
  'リストに格納
  Dim items As New ListViewItem(<会社コードのデータ>)
  items.SubItems.Add(<会社名のデータ>)
  items.SubItems.Add(<住所のデータ>)
  'ビューに描画
  .Items.AddRange(New ListViewItem() {items})
 Next
 .EndUpdate() 'EndUpdate() で表示を再開する。
End with
こんな感じです。ソース内<>はobjectです。
ぬあ!
上記コードの「COL_WIDTH6」は気にしないでください。
私が設定しているinteger型の定数です。
hideさん、ぺがらぼさん、こんにちわ。

> ListViewは、Viewプロパティを"Detail"にしました。
> で、一番上の行が灰色になりました。

おぉ。同士が増えた(笑)

ListViewは、行がItemで、それぞれのカラムはSubItemになります。
表示のさせ方はぺがらぼさんのサンプルの通りですね。

あと、列ヘッダ−については、
ListViewのColumnsプロパティでも設定できますよ!

でわでわ。頑張ってください。
べがらぼさんのコードを参考にさせて頂きました。

With全体をループさせるため、コメント入れたりして若干変更していますが、
見出し付のきれいなListViewが出ました!(一番上の行が空白となるのが?ですが・・・)

SQL = "select * 〜"
cmd.CommandText = SQL
Dim reader As SqlClient.SqlDataReader = cmd.ExecuteReader
Do While reader.Read()
Dim XXX As String = reader("〇〇コード")
'↑数字項目だと、Objectではエラーになるんですね・・・
Dim YYY As Object = reader("カナ氏名")
'↑Stringでも別にOKでしたが、Objectの方がいいのでしょうか?

With ListView1
.BeginUpdate()
'.Items.Clear()
'For m As Integer = 0 To ???

Dim items As New ListViewItem(XXX)
items.SubItems.Add(YYY)
.Items.AddRange(New ListViewItem() {items})
'Next
.EndUpdate()
End With
Loop

SHさん、べがらぼさん、本当に助かりました。
本当に感謝、感謝です。
これからは、行を選択してその行を別のDBに追加などといったコードを考えて行きます。
また、お聞きすることになると思いますが、よろしくお願い致します。
hideさんこんにちは

> With全体をループさせるため、コメント入れたりして若干変更していますが、
> 見出し付のきれいなListViewが出ました!(一番上の行が空白となるのが?ですが・・・)

列ヘッダーですか?
それとも、カラムのインデックスがおかしいのかも・・・

> SQL = "select * 〜"
> cmd.CommandText = SQL
> Dim reader As SqlClient.SqlDataReader = cmd.ExecuteReader
> Do While reader.Read()
> Dim XXX As String = reader("〇〇コード")
> '↑数字項目だと、Objectではエラーになるんですね・・・
> Dim YYY As Object = reader("カナ氏名")
> '↑Stringでも別にOKでしたが、Objectの方がいいのでしょうか?
>
> With ListView1
> .BeginUpdate()
> '.Items.Clear()
> 'For m As Integer = 0 To ???
>
> Dim items As New ListViewItem(XXX)
> items.SubItems.Add(YYY)
> .Items.AddRange(New ListViewItem() {items})
> 'Next
> .EndUpdate()
> End With
> Loop
>
> SHさん、べがらぼさん、本当に助かりました。
> 本当に感謝、感謝です。
> これからは、行を選択してその行を別のDBに追加などといったコードを考えて行きます。
> また、お聞きすることになると思いますが、よろしくお願い致します。

うまくいったようで何よりです。
ただ、

> Dim XXX As String = reader("〇〇コード")
> '↑数字項目だと、Objectではエラーになるんですね・・・
> Dim YYY As Object = reader("カナ氏名")
> '↑Stringでも別にOKでしたが、Objectの方がいいのでしょうか?

この部分ですが、
一つのデータのかたまりを扱うのであれば、
必要なデータのかたまりをクラスにしちゃったほうが楽ですよ。
特に、DBへの追加を考えるなら、
テーブル単位とかでクラスにしちゃったほうが楽だと思います。

ここからは言葉ばかりの説明でわかりにくいかも知れませんが・・・
まず、DBからデータを取得したら、while reader.Read()で、
オブジェクトのインスタンスを作成して、
各カラムの値をオブジェクトのプロパティにセットします。

行を選択→DBに追加というのを考えるとき、
オブジェクト単位で扱うほうがわかりやすいと思いますよ。

あとは、画面上の更新と、DB上の更新を分けたいときとか。
オブジェクトにしておくことをお勧めします。

でわでわ。
SHさん、hideさん、こんばんは。
うまくいったみたいですね。

>With全体をループさせるため、コメント入れたりして若干変更していますが、
for文はあくまでサンプルだったもので、この方が解りやすいかな?と思いまして…

>見出し付のきれいなListViewが出ました!(一番上の行が空白となるのが?ですが・・・)
SQLの実行結果をもう一度確認してみてはいかがでしょうか?
もしかしたら、先頭レコードにNull値が入っているデータを取得している可能性がありますので。

> Dim XXX As String = reader("〇〇コード")
> '↑数字項目だと、Objectではエラーになるんですね・・・
> Dim YYY As Object = reader("カナ氏名")
> '↑Stringでも別にOKでしたが、Objectの方がいいのでしょうか?
私はDataReader用のクラスを作ってカプセル化しています。私のサイトにADO.NET操作がありますので、
参考にしてみてはいかがでしょうか?

また、SHさんがおっしゃられている事と被るかもしれませんが、
私の場合、テーブル用のクラスを作って、オブジェクト化しています。
例を挙げますと、例えば、会社マスターの場合

Public Class cCompany '会社マスター用のクラス
 Friend Structure Rec_Table 'データベース用構造体
  Public Code As String '会社コード
  Public Name As String '会社名
  Public Zip As String '郵便番号
  以下略
  Public upDay As String '更新日
 End Structure
 Friend TableData() As Rec_Table 'テーブル情報格納用
 
 Friend Sub New()
  Erase TableData
 End Sub
 
 以下、データ取得用メソッド、データ削除用メソッド、データ追加用メソッドなどなど…
End Class
こんな感じのクラスを用意しておけば、データ参照や追加などに「TableData(<行番号 - 1>).Code」みたいにできます。

では、がんばってください。
  • 題名: Re[11]: 一覧表示方法
  • 著者: hide
  • 日時: 2004/07/20 20:23:27
  • ID: 4957
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
列ヘッダーですか?
それとも、カラムのインデックスがおかしいのかも・・・
>すみません、まだ調査中です・・・。


ここからは言葉ばかりの説明でわかりにくいかも知れませんが・・・
まず、DBからデータを取得したら、while reader.Read()で、
オブジェクトのインスタンスを作成して、
各カラムの値をオブジェクトのプロパティにセットします。

>すいません、さっぱり??です・・・。
>ただ、ListViewに表示の際には、例えば 1-234-56 とか、2004/01 とかで編集してい >ます。編集とは別に、reader("〇〇コード")ごとに何かを作る?みたいな感じでしょう>か?なお、読み込むDBと、ListViewで選択したレコードを格納するDBとは、レイア>ウトは違うものです。
ご教授お願い致します。
>すいません、さっぱり??です・・・。
>ただ、ListViewに表示の際には、例えば 1-234-56 とか、2004/01 とかで編集しています。

↑これって、DBから取得したデータを加工して表示するってことですよね?

>編集とは別に、reader("〇〇コード")ごとに何かを作る?みたいな感じでしょうか?なお、読み込むDBと、ListViewで選択したレコードを格納するDBとは、レイアウトは違うものです。

Selectの結果毎にオブジェクトをつくるというイメージですかね。
たとえば、Selectの結果が社員を指すものであれば、

dim emp as [社員]
↑この、[社員]には、Selectの結果のカラムがプロパティになってます。

While read (はしょってごめんなさい)
emp = new [社員]

with emp
.ID = reader("ID")
.Name = reader("NAME")
end with

loop

という風にしといて、
ListViewでは、1行1empの表示をさせる。。
みたいな。


扱うデータの単位をクラスや構造体で持つと楽になります。
慣れるまでは大変だと思いますが、
頑張ってください!
ListViewに表示の際には、例えば 1-234-56 とか、2004/01 とかで編集しています。
>加工して表示しています。ここはうまく出来ているのですが、漢字項目にNULLが入っていて、キャストが有効でない、とか出ます。どこかにNULLの対処法があったと思うので探してみます。また詰まったらお願いします・・・。

SHさん、べがらぼさんお二人から、オブジェクト化について示して頂いたこと、今の段階では??なので、また明日会社で考えさせて頂きます。
 本日はありがとうございました。
おはようございます。

Dim reader As SqlClient.SqlDataReader = cmd.ExecuteReaderの後、
Do whileの中で、Dim Simei As String = reader("氏名")とする時に、
NULLが入って来た場合の対応が?です。
Datagridには、.NullTextとかあるみたいですが、結局分かりませんでした・・・。
よろしくお願い致します。

(オブジェクト化の件は、来週レビューをしなければならない都合上、理解するのと時間的なことを考えて、レビュー後に再度勉強してから・・・と思っています。ご教授頂いて申し訳ありませんが、一旦見せられる形にしたいため・・・)
hide さん、おはようございます。

> >加工して表示しています。ここはうまく出来ているのですが、漢字項目にNULLが入っていて、キャストが有効でない、とか出ます。どこかにNULLの対処法があったと思うので探してみます。また詰まったらお願いします・・・。

NULLをさけるやり方としては、SQLの時点でdecode等でNULLを置換する方法とかがあると思いますが、select * で取得している場合は、後で置換するようにしないといけませんね。

ListViewに表示するだけなら、
半角スペースとかに置換しちゃえば問題ないかもしれないですね。
textboxに表示するときにはtrimをかければ消えますし。。
  • 題名: Re[15]: 一覧表示方法
  • 著者: hide
  • 日時: 2004/07/21 11:08:23
  • ID: 4966
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
SHさん、おはようございます。昨日はたいへんありがとうございました。

Dim Simei As Object = reader("氏名")

の後に、SimeiがNULLだったら・・・という記述をするのだと思いますが、
その文法が分かりません。
If Simei Is Null とか書いてみましたが違うみたいです。
申し訳ありません、よろしくお願い致します。
NULLの件は、これでうまくいったみたいです。

Dim Simei As Object = reader("氏名")
If IsDBNull(reader("氏名")) = True Then
Simei = ""
End If

もし、こっちが普通というのがありましたら、ご教授お願い致します。
hideさん、SHさん、おはようさんです。

> NULLの件は、これでうまくいったみたいです。
>
> Dim Simei As Object = reader("氏名")
> If IsDBNull(reader("氏名")) = True Then
> Simei = ""
> End If
>
> もし、こっちが普通というのがありましたら、ご教授お願い致します。

普通かどうかわかりませんが、
データを取得する際に、nullチェックを行い、nullでなければ、データを加工するといったアプリ側加工方法(SHさんの方法ですね)と、SQLのselect句で取得すべきデータを加工するといったデータベース側加工方法などがあります。
アプリ側加工方法でnull判定を行いたいのであれば、私のサイトの「VB.NETテクニック」の「あると便利な関数を作ろう!」というコラムに例が載っていますので参考にしてください。

オブジェクト化についてですが、わかってもらおうと思って、サンプルを作りました。私のサイトに住所検索というのを用意致しましたので、参考にしてください。
  • 題名: Re[16]: 一覧表示方法
  • 著者: SH
  • 日時: 2004/07/21 11:49:00
  • ID: 4969
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
> Dim Simei As Object = reader("氏名")
> If IsDBNull(reader("氏名")) = True Then
> Simei = ""
> End If
>
> もし、こっちが普通というのがありましたら、ご教授お願い致します。

これで全然大丈夫だと思いますよ!
やりやすい方法で実現するのが一番だと思います。

あ、でも変数をobject型で持つのは辞めたほうがいいですね・・・

object型は、何でもOKなだけに、
たとえば、本来数字の変数に、
文字列が入っていてもOKってことになっちゃいます。

DBのフィールドにはそれぞれ型が決まっていると思いますので、
使う変数もそれに合わせた形にしたほうがいいですね。
ぺがらぼさん、参考にさせて頂きます。サンプルまで作って頂いて恐縮します。もう、勉強するしかないですね(笑)

SHさん、先程の件、Dim Simei As String = reader("氏名")
としたのですが、「'DBNull'から型'String'へのキャストが有効ではありません。」
となりました。実際、文字タイプならstring,数字ならInteger位しか記述したことがありません。objectにしたのも、NullだからなんでもアリのObjectがいいのかな?と思ってそうしましたが・・・。
 よろしくお願い致します。
2004/07/21(Wed) 13:22:32 編集(投稿者)

hideさん、こんにちは。

> ぺがらぼさん、参考にさせて頂きます。サンプルまで作って頂いて恐縮します。もう、勉強するしかないですね(笑)
>
> SHさん、先程の件、Dim Simei As String = reader("氏名")
> としたのですが、「'DBNull'から型'String'へのキャストが有効ではありません。」
> となりました。実際、文字タイプならstring,数字ならInteger位しか記述したことがありません。objectにしたのも、NullだからなんでもアリのObjectがいいのかな?と思ってそうしましたが・・・。
>  よろしくお願い致します。

IsDBNullが使えるのは、Object型のみです。
住所検索のソース「cDbReader.vb」の「Public ReadOnly Property Data…」と「cYubin.vb」の「saveData」を見てください。そこでデータを取得後、キャストしています。
  • 題名: Re[18]: 一覧表示方法
  • 著者: SH
  • 日時: 2004/07/21 13:33:35
  • ID: 4972
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
hideさん、こんにちわ。

> SHさん、先程の件、Dim Simei As String = reader("氏名")
> としたのですが、「'DBNull'から型'String'へのキャストが有効ではありません。」
> となりました。実際、文字タイプならstring,数字ならInteger位しか記述したことがありません。objectにしたのも、NullだからなんでもアリのObjectがいいのかな?と思ってそうしましたが・・・。
>  よろしくお願い致します。

こうしておけば問題ないと思いますよ。
Dim Simei as String = ""

If IsDBNull(reader("氏名")) = False Then
Simei = reader("氏名")
End If

もう少し突っ込むと・・

型の宣言は、関数の頭で宣言して、
値の格納はループ(ここではWhile Readの中でやるのが一般的かと思います。)

Dim Shimei as String

While Read

If IsDBNull(reader("氏名")) = True Then
  Simei = ""
else
  Simei = reader("氏名")
End If

loop

という感じですね。
やり方は好みがあるのでなんともいえませんが・・・
hideさん、ぺがらぼさんこんにちわ。

> IsDBNullが使えるのは、Object型のみです。
> 住所検索のソース「cDbReader.vb」の「Public ReadOnly Property Data…」と「cYubin.vb」の「saveData」を見てください。そこでデータを取得後、キャストしています。

コレは知りませんでした。
失礼しました。
SHさん、こんにちは。

>>IsDBNullが使えるのは、Object型のみです。
> コレは知りませんでした。
> 失礼しました。

>If IsDBNull(reader("氏名")) = True Then
>  Simei = ""
>else
>  Simei = reader("氏名")
>End If
これは、正しい使い方だと思いますよ。とりあえず、Object型でチェックしてますしね(^^)
強いて言うなら、Simei = reader("氏名").ToStringとした方がいいってぐらいですかね。
おかげさまで、とりあえず、ListViewへの編集はうまく行った状態とします。

で、今度は行を選択した時には、その行の内容でDB更新したいのですが、
ListViewをなんらかのSelect文で内容取得して、その内容から更新では、2004/01などは、また逆変換することになるでおかしい気がします。やはり、読み込み時に、データ内容そのままをどこかへ格納し、そこから更新へ渡すのだと思います。

やはり、クラスを作るやり方じゃないと、結局難しいのでしょうか?(まだ、クラスのことは理解していなくて申し訳ありませんが)
 
 更新の手法の方向性についてご教授願いたいです。よろしくお願い致します。
 
hideさん、ぺがらぼさんこんにちわ。

表示のほうはOKみたいでよかったです。

たとえば、DBから取得したデータのうち、
”削除フラグ”みたいな画面には表示しないけど他のDBに入れたい。
という項目も出てくるかもしれません。

時間がないのかもしれませんが、
今のうちにオブジェクト指向の考えを取り入れたほうがいいと思います。

僕自身もまだまだ勉強中ですが^^;

こちらのサイトや、ぺがらぼさんのサイト等で、
時間のあるとき勉強することをお勧めします。

>  更新の手法の方向性についてご教授願いたいです。よろしくお願い致します。

参考になるかわかりませんが、僕の使うやり方です。

@DBからデータを取得
Aデータを扱う単位でオブジェクトを作成
Bオブジェクトを配列に格納
C配列の内容を一覧に表示
D行を選択されたら、配列から対象のオブジェクトを取り出す。
Eオブジェクトを編集
Fオブジェクトを配列に戻す
G配列の内容をDBに反映

こんな感じでしょうか。

システムの仕様にもよりますが、
DBへのアクセスのタイミングは少ないほうがいいと思います。

こうしておけば、
時間の表示形式などは、実データと表示用データを分けられますしね。
  • 題名: Re[23]: 一覧表示方法
  • 著者: hide
  • 日時: 2004/07/21 18:09:07
  • ID: 4997
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
SHさん、レスありがとうございます。
やはり、急がば回れ・・・という感じでしょうか。

なんとか頑張ります!!
SHさん、hideさん、こんばんは。
私のサンプルでSHさんが記述している事が可能です。
理由:データを取得した際、cYubinクラスを破棄(Dispose)しない限り、メモリに残っている…です。ヒントになる?
ぺがらぼさん、サンプルソース印刷して考えています。
つ、つらいですね・・・。
すいません、ListViewのプロパティで、Multiselect=Trueにすると、Ctrl押しながらだと複数行選択出来ますが、Ctrl押さなくても出来ますか?
よろしくお願い致します。
hideさん、こんばんは。
> ぺがらぼさん、サンプルソース印刷して考えています。
> つ、つらいですね・・・。
がんばれ〜〜〜(^^)/~~~
cYubinクラスに照準を絞ったら、理解できると思うよ。
それ以外を見ると、辛くなるだろうから…
あと、メソッドにカーソルを合わせて、右クリックで「定義へ移動」をクリックすると、そのメソッドにカーソルが行くから便利だよ。
サンプルの質問はスレ違いだから、気をつけてね
hideさん、ペガラボさん こんばんわ。
ソースを印刷して考えるのは難しいんじゃ??

実際に動かしてみて、
処理にコメントをつけて理解していくほうがいいような気がします。。

サンプルをどういじれば項目が増やせる。とか、
ソースにたいして自分がさせたい動きをするにはどこをいじればいいとかっていうポイントを見つけていくようにして、そこから理解を広げていけばいいと思いますよ。
  • 題名: Re[26]: 一覧表示方法
  • 著者: hide
  • 日時: 2004/07/21 19:59:41
  • ID: 5007
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
> サンプルをどういじれば項目が増やせる。とか、
> ソースにたいして自分がさせたい動きをするにはどこをいじればいいとかっていうポイントを見つけていくようにして、そこから理解を広げていけばいいと思いますよ。

なるほど!!ありがとうございます。
hideさん、こんばんは。
> すいません、ListViewのプロパティで、Multiselect=Trueにすると、Ctrl押しながらだと複数行選択出来ますが、Ctrl押さなくても出来ますか?
> よろしくお願い致します。
そんな器用なこと、Windowsで出来たっけ?
基本的にWindowsの標準操作です。もしマウスだけで、間を空けての選択ができるなら、可能だと思いますが…
まぁ、ドラッグができるので、Shiftと同じ扱いの複数選択なら可能です。
こんばんわ。

> そんな器用なこと、Windowsで出来たっけ?
> 基本的にWindowsの標準操作です。もしマウスだけで、間を空けての選択ができるなら、可能だと思いますが…
> まぁ、ドラッグができるので、Shiftと同じ扱いの複数選択なら可能です。

おぉ。出来る。
ListViewの、SelectedIndicesプロパティでindexが取得出来ますね。
でも、複数選択可にする場合は、表の操作に注意しないといけないですね。

たとえば、
削除→複数選択可
更新→選択行のみ
挿入→選択行の上にデータを挿入
追加→最下行にデータを追加

のように、データを扱う際の表の操作をちゃんと定義したほうがいいと思います。
画面上の自由度=バグの可能性
ですからねぇ^^;
■No5010に返信(SHさんの記事)
> こんばんわ。
>
>>そんな器用なこと、Windowsで出来たっけ?
>>基本的にWindowsの標準操作です。もしマウスだけで、間を空けての選択ができるなら、可能だと思いますが…
>>まぁ、ドラッグができるので、Shiftと同じ扱いの複数選択なら可能です。
>
> おぉ。出来る。
> ListViewの、SelectedIndicesプロパティでindexが取得出来ますね。
> でも、複数選択可にする場合は、表の操作に注意しないといけないですね。
>
> たとえば、
> 削除→複数選択可
> 更新→選択行のみ
> 挿入→選択行の上にデータを挿入
> 追加→最下行にデータを追加
>
> のように、データを扱う際の表の操作をちゃんと定義したほうがいいと思います。
> 画面上の自由度=バグの可能性
> ですからねぇ^^;

自由度を上げると、かえって使いにくいよ。

そういえば、昔、リストを使っての開発で、複数選択可能&MFCで開発しろ!と言われ…(-_-;)
しかも階層にしてくれだの、何だのと…(((( ;゚Д゚)))
結局、複数選択はエンドユーザーが使い辛いので「イラネ」の一言であぼ〜ん!でした。
  • 題名: Re[29]: 一覧表示方法
  • 著者: hide
  • 日時: 2004/07/27 12:42:20
  • ID: 5137
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
みなさん、レスが遅れて申し訳ありません。
とりあえず、あさってのデモは、軽く見てもらうだけなので、オブジェクト指向風には修正していません。作り直して間に合わす勇気がなかったので・・・。デモ後に、スッキリ作り直そうと思っています。今のは、何回も読み込むようになってしまっていて、自分で書いていてもイヤなので。
 このスレ、どんどん階層が深くなってますし、実際直すまでこの状態だと何か引っかかった感じなので、一旦解決で終わらせて頂きます。また、別スレで質問させて頂きます。
ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板