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

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

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

Re[10]: GridViewの単語の強調表示で編集できなくなった


(過去ログ 75 を表示中)

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

■44353 / inTopicNo.1)  GridViewの単語の強調表示で編集できなくなった
  
□投稿者/ サトシ (37回)-(2009/12/06(Sun) 19:38:25)

分類:[ASP.NET (VB)] 

2009/12/06(Sun) 21:03:36 編集(投稿者)
2009/12/06(Sun) 19:42:53 編集(投稿者)

以前、GridViewで特定の単語を強調表示したい件でお世話になった
http://bbs.wankuma.com/index.cgi?mode=al2&namber=42395&KLOG=72
http://bbs.wankuma.com/index.cgi?mode=al2&namber=42749&KLOG=73
の続きの質問です。

GridViewのTemplateFieldの特定の単語を強調表示にしたら、GridViewの「編集」ボタンをクリックすると
dumLabel.Text = dumLabel.Text.Replace("鈴木", "<B Style='background-color:#fff495'>鈴木</B>")
の行で「NullReferenceExceptionはユーザコードによってバンドルされてませんでした。
オブジェクト参照がオブジェクト インスタンスに設定されていません。」
のエラーが発生し、「編集」機能が動かなくなってしまいました。
エラーメッセージで検索しても、解決法らしきものが見付かりません。
解決の方法をアドバイス頂けると助かります。
VWD2008,VB

<%@ Page Language="VB" ValidateRequest = "false" %>

Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs)
    If e.Row.RowType = DataControlRowType.DataRow Then
        Dim dumLabel As Label = e.Row.FindControl("Label1")
        dumLabel.Text = dumLabel.Text.Replace("鈴木", "<B Style='background-color:#fff495'>鈴木</B>")
    End If
End Sub

引用返信 編集キー/
■44356 / inTopicNo.2)  Re[1]: GridViewの単語の強調表示で編集できなくなった
□投稿者/ gtk2k (113回)-(2009/12/06(Sun) 22:26:09)
FindControlで"Label1"という名前のコントロールがみつからないからなのではと予想。
引用返信 編集キー/
■44358 / inTopicNo.3)  Re[2]: GridViewの単語の強調表示で編集できなくなった
□投稿者/ サトシ (38回)-(2009/12/06(Sun) 23:49:02)
2009/12/06(Sun) 23:59:28 編集(投稿者)

No44356 (gtk2k さん) に返信
> FindControlで"Label1"という名前のコントロールがみつからないからなのではと予想。
gtk2kさん、お返事ありがとうございます。
現在のプログラムでも、GridViewは問題なく表示され、鈴木と言う単語は強調表示されて
いますので、「FindControlで"Label1"という名前のコントロールがみつからない」
という状況ではないと考えたのですが、いかがでしょうか?
「編集」ボタンをクリックすると、上記エラーが発生し動かなくなってしまします。
DBはMS Accessを使ってます。
引用返信 編集キー/
■44359 / inTopicNo.4)  Re[3]: GridViewの単語の強調表示で編集できなくなった
□投稿者/ gtk2k (114回)-(2009/12/07(Mon) 00:07:13)
No44358 (サトシ さん) に返信
> 2009/12/06(Sun) 23:59:28 編集(投稿者)
>
> ■No44356 (gtk2k さん) に返信
>>FindControlで"Label1"という名前のコントロールがみつからないからなのではと予想。
> gtk2kさん、お返事ありがとうございます。
> 現在のプログラムでも、GridViewは問題なく表示され、鈴木と言う単語は強調表示されて
> いますので、「FindControlで"Label1"という名前のコントロールがみつからない」
> という状況ではないと考えたのですが、いかがでしょうか?
> 「編集」ボタンをクリックすると、上記エラーが発生し動かなくなってしまします。
> DBはMS Accessを使ってます。

テンプレート化してると思うが、編集時のテンプレート(EditItemTemplate)での表示コントロールは
ラベル使ってるの?
引用返信 編集キー/
■44360 / inTopicNo.5)  Re[4]: GridViewの単語の強調表示で編集できなくなった
□投稿者/ サトシ (39回)-(2009/12/07(Mon) 00:12:59)
No44359 (gtk2k さん) に返信
> テンプレート化してると思うが、編集時のテンプレート(EditItemTemplate)での表示コントロールは
> ラベル使ってるの?
いいえ、EditItemTemplateはTextBox1で表示する設定で
ItemTemplateはLabel1で表示する設定です。
引用返信 編集キー/
■44361 / inTopicNo.6)  Re[5]: GridViewの単語の強調表示で編集できなくなった
□投稿者/ gtk2k (115回)-(2009/12/07(Mon) 00:37:13)
2009/12/07(Mon) 00:39:40 編集(投稿者)

No44360 (サトシ さん) に返信
> ■No44359 (gtk2k さん) に返信
>>テンプレート化してると思うが、編集時のテンプレート(EditItemTemplate)での表示コントロールは
>>ラベル使ってるの?
> いいえ、EditItemTemplateはTextBox1で表示する設定で
> ItemTemplateはLabel1で表示する設定です。

編集をクリックされた行は、Label1が表示されるのではなくTextBox1が表示されるから、
FindoControl("Label1")でNothingを返す。
編集行のときは処理をパスさせないと。
引用返信 編集キー/
■44395 / inTopicNo.7)  Re[6]: GridViewの単語の強調表示で編集できなくなった
□投稿者/ サトシ (40回)-(2009/12/07(Mon) 23:36:19)
No44361 (gtk2k さん) に返信
> 編集をクリックされた行は、Label1が表示されるのではなくTextBox1が表示されるから、
> FindoControl("Label1")でNothingを返す。
> 編集行のときは処理をパスさせないと。

gtk2kさん、アドバイスありがとうございます。
やはりgtk2kさんの仰られたとおりFindControlが"Label1"を見付けられないのがエラーの
原因のようですね。
> 編集行のときは処理をパスさせないと。
の方法を検索して探したのですが、見付けられません。
その方法に関しすこしヒントを頂けると助かります。よろしくお願いします。
引用返信 編集キー/
■44400 / inTopicNo.8)  Re[7]: GridViewの単語の強調表示で編集できなくなった
□投稿者/ gtk2k (117回)-(2009/12/08(Tue) 04:59:41)
No44395 (サトシ さん) に返信
> ■No44361 (gtk2k さん) に返信
>>編集をクリックされた行は、Label1が表示されるのではなくTextBox1が表示されるから、
>>FindoControl("Label1")でNothingを返す。
>>編集行のときは処理をパスさせないと。
>
> gtk2kさん、アドバイスありがとうございます。
> やはりgtk2kさんの仰られたとおりFindControlが"Label1"を見付けられないのがエラーの
> 原因のようですね。
>>編集行のときは処理をパスさせないと。
> の方法を検索して探したのですが、見付けられません。
> その方法に関しすこしヒントを頂けると助かります。よろしくお願いします。

If e.Row.RowIndex = Me.GridView1.EditIndex Then Return

を処理の前に追加すればOK
引用返信 編集キー/
■44408 / inTopicNo.9)  Re[8]: GridViewの単語の強調表示で編集できなくなった
□投稿者/ まさる (130回)-(2009/12/08(Tue) 14:13:50)
まさる さんの Web サイト
No44400 (gtk2k さん) に返信
> 
> If e.Row.RowIndex = Me.GridView1.EditIndex Then Return
> 
> を処理の前に追加すればOK

別解として、

If e.Row.RowState = DataControlRowState.Edit Then

でも判定できます。

http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.gridviewrow.rowstate.aspx

引用返信 編集キー/
■44409 / inTopicNo.10)  Re[9]: GridViewの単語の強調表示で編集できなくなった
□投稿者/ もりお (139回)-(2009/12/08(Tue) 14:43:52)
No44408 (まさる さん) に返信
> If e.Row.RowState = DataControlRowState.Edit Then

ビットで判定するので場合によってはこれも必要かもですね。

If e.Row.RowState = (DataControlRowState.Edit Or DataControlRowState.Alternate) Then
    Return
End If

If e.Row.RowState = (DataControlRowState.Edit Or DataControlRowState.Selected) Then
    Return
End If

If e.Row.RowState = (DataControlRowState.Edit Or DataControlRowState.Alternate Or DataControlRowState.Selected) Then
    Return
End If

これでいいのかしら?自信ないです。

If (e.Row.RowState And DataControlRowState.Edit) = DataControlRowState.Edit Then
    Return
End If

引用返信 編集キー/
■44423 / inTopicNo.11)  Re[10]: GridViewの単語の強調表示で編集できなくなった
□投稿者/ サトシ (41回)-(2009/12/09(Wed) 06:35:28)
gtk2kさん、まさるさん、もりおさん、アドバイスありがとうございました。

gtk2kさん wrote
> If e.Row.RowIndex = Me.GridView1.EditIndex Then Return
> 
> を処理の前に追加すればOK

gtk2kさんのアドバイスでGridViewのTemplateFieldの特定の単語を強調表示し、かつ
GridViewの「編集」機能も正常に機能する様になりました。ありがとうございました。

<%@ Page Language="VB" ValidateRequest = "false" %>

Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs)
    If e.Row.RowType = DataControlRowType.DataRow Then
        If e.Row.RowIndex = Me.GridView1.EditIndex Then Return
        Dim dumLabel As Label = e.Row.FindControl("Label1")
        dumLabel.Text = dumLabel.Text.Replace("鈴木", "<B Style='background-color:#fff495'>鈴木</B>")
    End If
End Sub

しかし、まさるさんの別解アドバイス
If e.Row.RowState = DataControlRowState.Edit Then Return
を記述してみましたが、
「NullReferenceExceptionはユーザコードによってバンドルされてませんでした。
オブジェクト参照がオブジェクト インスタンスに設定されていません。」
のエラーメッセージが出て動きませんでした。まさるさん、もりおさんの別解アドバイス
については更に勉強してみようと思います。

皆様アドバイス本当にありがとうございました。

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


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

このトピックに書きこむ

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

管理者用

- Child Tree -