C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: DataGridにてNulltextの設定値取


(過去ログ 13 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■4162 / inTopicNo.1)  DataGridにてNulltextの設定値取得について
  
□投稿者/ うっちー (8回)-(2007/06/08(Fri) 13:47:43)

分類:[VB.NET (Windows)] 

VS Version:Visual Studio 2003
OS Windows XP

http://dobon.net/vb/dotnet/datagrid/nulltext.html
現在、上記のサイトを参考に、DataGridにてNulltextを使用する方法を試しているのですが、
Nulltextで設定し表示されたままの値を取得しようするとエラーが発生してしまいます。
>Debug.WriteLine(CType(dTable.Rows(iRow)(0), String))
エラー内容
'System.InvalidCastException' のハンドルされていない例外が microsoft.visualbasic.dll で発生しました。
追加情報 : 型 'DBNull' から型 'String' へのキャストが有効ではありません。

DBNullについて追求してみたのですが、いまいち理解が出来ず、
下記の様に指定してみましたが、表示されている値が取得出来ませんでした。
>Debug.WriteLine(System.Convert.ToString(dTable.Rows(iRow)(0)))

申し訳ありませんが、どなたかご指導を宜しくお願いします。


以下ソースです。
Option Strict On
Option Explicit On

Imports System
Imports System.Data
Imports System.Windows.Forms
Imports System.Drawing

Public Class Form1
Inherits System.Windows.Forms.Form

Private dTable As DataTable

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim dt As New DataTable("DataTable1")
dt.Columns.Add("No", GetType(String))
dt.Columns.Add("name", GetType(String))

DataGrid1.DataSource = dt

Dim ts As New DataGridTableStyle
ts.MappingName = "DataTable1"

Dim cs As DataGridTextBoxColumn = New DataGridTextBoxColumn
cs.MappingName = "No"
cs.HeaderText = "No"
cs.Width = 25
cs.NullText = "1"

Dim cs1 As DataGridTextBoxColumn = New DataGridTextBoxColumn
cs1.MappingName = "name"
cs1.HeaderText = "名前"
cs1.NullText = ""

ts.GridColumnStyles.AddRange(New DataGridColumnStyle() {cs, cs1})

DataGrid1.TableStyles.Add(ts)
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim iRow As Integer
dTable = CType(DataGrid1.DataSource, DataTable)
For iRow = 0 To dTable.Rows.Count - 1
Debug.WriteLine(System.Convert.ToString(dTable.Rows(iRow)(0)))
'Debug.WriteLine(CType(dTable.Rows(iRow)(0), String))
'Debug.WriteLine(System.Convert.ToString(dTable.Rows(iRow)(0)) & " , " & CType(dTable.Rows(iRow)(1), String))
Next
End Sub
End Class
引用返信 編集キー/
■4168 / inTopicNo.2)  Re[1]: DataGridにてNulltextの設定値取
□投稿者/ いしだ (5回)-(2007/06/08(Fri) 14:47:18)
いしだ さんの Web サイト
2007/06/08(Fri) 14:47:43 編集(投稿者)
こんにちは。

If dTable.Rows(iRow)(0) Is DBNull.Value Then
    'NullTextで設定したもの
    Debug.WriteLine("1")
Else
    Debug.WriteLine(CType(dTable.Rows(iRow)(0), String))
End If

のようにDBNullかどうか判定する必要があるのではないでしょうか?

引用返信 編集キー/
■4170 / inTopicNo.3)  Re[2]: DataGridにてNulltextの設定値取
□投稿者/ 特攻隊長まるるう (57回)-(2007/06/08(Fri) 15:03:12)
2007/06/08(Fri) 15:14:34 編集(投稿者)
No4162 (うっちー さん) に返信
データベースで扱われる NULL についての知識はありますか?

データがまだ何も設定されていない、空っぽの状態です。
数値の 0 ではありません。
長さが 0 の文字列("")とも違います。

例えば、毎日の気温を記録しているデータベースがあったとします。
しかし、6/8は温度計が壊れていて気温を計測できませんでした。
さてどう記録しましょう?。0 では 0℃の意味になってしまいます。
NULL を使えば解決できる一例です。計測できていないので空っぽ
という意味で記録できます。

『データが存在しない』ということです。まさに『この世に存在しない』
わけですから、
>下記の様に指定してみましたが、表示されている値が取得出来ませんでした。
>>Debug.WriteLine(System.Convert.ToString(dTable.Rows(iRow)(0)))
表示しようとしてもできません。

エラーメッセージは『この世に存在しないものを文字列に置き換えろって
命令されましたが、どうすれば良いか分かりませんでした。』ということです。

これに対応するために DataGrid には NullText プロパティが存在します。
NULL だったときにどう表示すれば良いか?を決めているのです。

内部処理として、いしださんの示されたような判定を DataGrid がやっている
わけです。↓判定用の関数も存在します。
[IsDBNull 関数]
http://msdn.microsoft.com/library/ja/vblr7/html/vafctIsNull.asp

 # DataGrid の値は以下のコードで取れると思ってたけど、NullText が
 # 取れなかった。。。
 #         With Me.DataGrid1
 #             Debug.WriteLine(.Item(.CurrentCell.RowNumber, .CurrentCell.ColumnNumber))
 #         End With

引用返信 編集キー/
■4173 / inTopicNo.4)  Re[3]: DataGridにてNulltextの設定値取
□投稿者/ うっちー (9回)-(2007/06/08(Fri) 15:52:32)
いしださん、特攻隊長まるるうさん、返信ありがとうございます。

いしださんからは、内部処理の一例を指導していただき、
特攻隊長まるるうさんからは、解りやすい説明をしていただき真にありがとうございます。

まだまだ、自分の知識不足に痛感いたしました。

今回の質問事項については、自分がNulltextの使い方を間違えていたので今一度構想を考え直したいと思います。

また、解らない質問が発生しましたら、利用させて頂きますのでその時は宜しくお願いします。
ご指導ありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -