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

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

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

Re[8]: DATAVIEWのROWFILTERでの検索


(過去ログ 15 を表示中)

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

■5337 / inTopicNo.1)  DATAVIEWのROWFILTERでの検索
  
□投稿者/ C#初心者 (3回)-(2007/07/10(Tue) 21:07:05)

分類:[ASP.NET (C#)] 

2007/07/11(Wed) 16:15:14 編集(投稿者)
2007/07/11(Wed) 12:37:29 編集(投稿者)
2007/07/11(Wed) 03:47:38 編集(投稿者)

<pre><pre>ご質問お願い致します。
C#を使用しております。
t_transmitはSQLのカラムで、bit型です。0又は1が入ります。
下記コードから(case t_transmit when 0 then '送信未処理' else '送信済み' end)as t_transmitではなくt_transmitならば0または1で検索すれば表示
されますが、下記コードのように送信未処理、送信済みに変換すると検索結果が表示されませんでした。
いろいろ試したのですがどのようにしたら送信未処理、送信済みで検索できるようになるのかご教授お願いできますでしょうか。
お願い致します。
Key[0]は検索文字列です。

string sql = "select (case t_transmit when 0 then '送信未処理' else '送信済み' end)as t_transmit from tb_customer order by iden desc";

SqlConnection cn = new SqlConnection(ConfigurationSettings.AppSettings["sqlConnectionString"]);
SqlDataAdapter da = new SqlDataAdapter(sql,cn);
DataSet ds = new DataSet();
da.Fill(ds,"test");
datagrid.DataSource = ds.Tables["test"];


string filter = "";
filter += "(t_transmit LIKE '%"+Key[0]+"%' )";

dv = new DataView(ds.Tables["test"]);
dv.RowFilter =filter;
datagrid.DataSource=dv;//データグリッド
datagrid.DataBind();//データグリッドへバインド</pre></pre>
引用返信 編集キー/
■5338 / inTopicNo.2)  Re[1]: DATAVIEWのROWFILTERでの検索
□投稿者/ じゃかるた (42回)-(2007/07/10(Tue) 22:20:35)
No5337 (C#初心者 さん) に返信
Key[0]の値は何?
引用返信 編集キー/
■5343 / inTopicNo.3)  Re[2]: DATAVIEWのROWFILTERでの検索
□投稿者/ じゃかるた (45回)-(2007/07/11(Wed) 10:30:29)
> ■No5337 (C#初心者 さん) に返信

>Key[0]は検索文字列です。
編集で更新されると気づかないことが多いです...返信してください。

それとまったく回答になっていません。

filter += "(t_transmit LIKE '%"+Key[0]+"%' )";
dv = new DataView(ds.Tables["test"]);
dv.RowFilter =filter;

これが何してるかは理解できてます?

引用返信 編集キー/
■5350 / inTopicNo.4)  Re[3]: DATAVIEWのROWFILTERでの検索
□投稿者/ C#初心者 (4回)-(2007/07/11(Wed) 12:43:55)
No5343 (じゃかるた さん) に返信
>>■No5337 (C#初心者 さん) に返信
>
> >Key[0]は検索文字列です。
> 編集で更新されると気づかないことが多いです...返信してください。
>
> それとまったく回答になっていません。
>
> filter += "(t_transmit LIKE '%"+Key[0]+"%' )";
> dv = new DataView(ds.Tables["test"]);
> dv.RowFilter =filter;
>
> これが何してるかは理解できてます?
>
回答になっていませんか?
Key[0]は文字が入ります。その文字からt_transmit LIKE '%"+Key[0]+"%' で
一致するものをデータグリッドに表示させようとしています。
datatableをdataviewにいれ、dvのメソッドでフィルターを書けデータグリッドにバインドしているものと
思います。
"(t_transmit LIKE '%"+Key[0]+"%' )";のt_transmitを
(case t_transmit when 0 then '送信未処理' else '送信済み' end)as t_transmitにしても

case t_transmit when 0 then '送信未処理' else '送信済み' endにしても
エラーになりました。

お願い致します。

引用返信 編集キー/
■5351 / inTopicNo.5)  Re[4]: DATAVIEWのROWFILTERでの検索
□投稿者/ ぽぴ王子 (241回)-(2007/07/11(Wed) 13:00:56)
ぽぴ王子 さんの Web サイト
No5350 (C#初心者 さん) に返信

> 回答になっていませんか?
> Key[0]は文字が入ります。その文字からt_transmit LIKE '%"+Key[0]+"%' で
> 一致するものをデータグリッドに表示させようとしています。

たぶん、私が回答したとしても同じような流れになると思うので。
「Key[0]は文字が入ります。」はいいのですよ。ソースからだいたい想像がつきますし。
問題は

な か み

だと思うのですね。
> Key[0]の値は何?
という、じゃかるたさんの質問に
> Key[0]は検索文字列です。
と返されても、じゃあその検索文字列って何が入ってるのさ?という話になるわけで。

元々の質問が「検索結果が表示されない」ということで、それを聞いておられるわけ
ですから、もしかすると検索条件がマズいんじゃないかな〜?と思って、じゃかるた
さんも聞かれたのではないかと勝手に推測しちゃうのですけど。
# まあ「だったらちゃんと聞け!」という話ももちろんなのですが

で、改めて私も知りたいのですが
Key[0] にはどんな「文字列」が入っているでしょうか。原因はそこじゃない可能性も
ありますが、よろしくお願いします。

引用返信 編集キー/
■5353 / inTopicNo.6)  Re[5]: DATAVIEWのROWFILTERでの検索
□投稿者/ C#初心者 (5回)-(2007/07/11(Wed) 13:04:53)
2007/07/11(Wed) 13:07:37 編集(投稿者)
No5351 (ぽぴ王子 さん) に返信
> ■No5350 (C#初心者 さん) に返信
> 
>>回答になっていませんか?
>>Key[0]は文字が入ります。その文字からt_transmit LIKE '%"+Key[0]+"%' で
>>一致するものをデータグリッドに表示させようとしています。
> 
> たぶん、私が回答したとしても同じような流れになると思うので。
> 「Key[0]は文字が入ります。」はいいのですよ。ソースからだいたい想像がつきますし。
> 問題は
> 
> な か み
> 
> だと思うのですね。
>>Key[0]の値は何?
> という、じゃかるたさんの質問に
>>Key[0]は検索文字列です。
> と返されても、じゃあその検索文字列って何が入ってるのさ?という話になるわけで。
> 
> 元々の質問が「検索結果が表示されない」ということで、それを聞いておられるわけ
> ですから、もしかすると検索条件がマズいんじゃないかな〜?と思って、じゃかるた
> さんも聞かれたのではないかと勝手に推測しちゃうのですけど。
> # まあ「だったらちゃんと聞け!」という話ももちろんなのですが
> 
> で、改めて私も知りたいのですが
> Key[0] にはどんな「文字列」が入っているでしょうか。原因はそこじゃない可能性も
> ありますが、よろしくお願いします。

ありがとうございます。すみません。
中身はテキストボックスからの入力すべてなので
あああ、いいい、aaa、1などいろいろです。
t_transmitにLINKで一致している文字がある場合出したいんです。。
回答になっていますでしょうか?

とりあえず上記の
string sql = "select (case t_transmit when 0 then '送信未処理' else '送信済み' end)as t_transmit from tb_customer order by iden desc";

SqlConnection cn = new SqlConnection(ConfigurationSettings.AppSettings["sqlConnectionString"]);
SqlDataAdapter da = new SqlDataAdapter(sql,cn);
DataSet ds = new DataSet();
da.Fill(ds,"test");
datagrid.DataSource = ds.Tables["test"];


string filter = "";
filter += "(t_transmit LIKE '%"+Key[0]+"%' )";

dv = new DataView(ds.Tables["test"]);
dv.RowFilter =filter;
datagrid.DataSource=dv;//データグリッド
datagrid.DataBind();//データグリッドへバインド
を実行すればエラーはでず検索は出来ますがt_transmitに実際SQLには言っているものが
0と1なのでそれで検索を掛けないと表示されません
送信未処理、送信済みで検索し表示したいんです。

お願い致します。

引用返信 編集キー/
■5354 / inTopicNo.7)  Re[4]: DATAVIEWのROWFILTERでの検索
□投稿者/ じゃかるた (48回)-(2007/07/11(Wed) 13:06:41)
No5350 (C#初心者 さん) に返信
>t_transmit LIKE '%"+Key[0]+"%'
t_transmit LIKE '%0%'
t_transmit LIKE '%1%'

t_transmit LIKE '%送信済み%'
t_transmit LIKE '%送信未処理%'

Key[0]の値によって表示が変わるのはお分かりでしょうか?

送信未処理、送信済みで表示したいのであれば
Key[0]に"送信済み"、又は"送信未処理"が入ってきてますか?ということを確認しています。


引用返信 編集キー/
■5355 / inTopicNo.8)  Re[5]: DATAVIEWのROWFILTERでの検索
□投稿者/ C#初心者 (6回)-(2007/07/11(Wed) 13:09:14)
No5354 (じゃかるた さん) に返信
> ■No5350 (C#初心者 さん) に返信
> >t_transmit LIKE '%"+Key[0]+"%'
> t_transmit LIKE '%0%'
> t_transmit LIKE '%1%'
>
> t_transmit LIKE '%送信済み%'
> t_transmit LIKE '%送信未処理%'
>
> Key[0]の値によって表示が変わるのはお分かりでしょうか?
>
> 送信未処理、送信済みで表示したいのであれば
> Key[0]に"送信済み"、又は"送信未処理"が入ってきてますか?ということを確認しています。
>
大変すみません。そうですね。送信済みなどで検索をかけても表示されません。
0と1ならば検索結果が表示されます。
テキストボックスからの入力で結果を返すので文字は何でもいれれます。一致していれば表示します。
引用返信 編集キー/
■5356 / inTopicNo.9)  Re[6]: DATAVIEWのROWFILTERでの検索
□投稿者/ じゃかるた (49回)-(2007/07/11(Wed) 13:12:22)
No5353 (C#初心者 さん) に返信
> ■No5351 (ぽぴ王子 さん) に返信

># まあ「だったらちゃんと聞け!」という話ももちろんなのですが

念のため
>Key[0]の値は何?
と始めから聞いています。型は聞いていませんが^^;

ぽぴ王子さんの推測どおりです。ちなみに原因の特定もできていませんので。
引用返信 編集キー/
■5360 / inTopicNo.10)  Re[6]: DATAVIEWのROWFILTERでの検索
□投稿者/ 魔界の仮面弁士 (338回)-(2007/07/11(Wed) 13:25:44)
2007/07/11(Wed) 13:31:21 編集(投稿者)

個人的には、Key[0] の値よりも、それを設定した後の
filter の値がどうなっているかの方が気になります。
(filter の内容を、実際に確認されていますか?)

# というか、今回の内容だけみれば、SQL 自体で WHERE してしまえば良いような気も。


> string filter = "";
> filter += "(t_transmit LIKE '%"+Key[0]+"%' )";

なぜ「+=」なのかという突っ込みも入れたいのですが、そもそも、Key[0] って、
> テキストボックスからの入力で結果を返すので文字は何でもいれれます。
なのですよね。
であれば、シングルクォート(')、ワイルドカード文字(*,%)、角括弧([,])といった
特殊文字が入力された場合への対応も必要でしょう。


> datagrid.DataBind();//データグリッドへバインド
System.Windows.Forms.DataGrid や、
System.Windows.Forms.DataGridView に、DataBind メソッドは無いような。

もしかして、最初の質問時に
> 分類:[C#]
を選択されていましたが……実際には [ASP.NET (C#)] なのではありませんか?
引用返信 編集キー/
■5362 / inTopicNo.11)  Re[7]: DATAVIEWのROWFILTERでの検索
□投稿者/ C#初心者 (7回)-(2007/07/11(Wed) 13:34:13)
No5360 (魔界の仮面弁士 さん) に返信
> 個人的には、Key[0] の値よりも、それを設定した後の
> filter の値がどうなっているかの方が気になります。
>
>>string filter = "";
>>filter += "(t_transmit LIKE '%"+Key[0]+"%' )";
>
> なぜ「+=」なのかという突っ込みも入れたいのですが、そもそも、Key[0] って、
>>テキストボックスからの入力で結果を返すので文字は何でもいれれます。一致していれば表示します。
> なのですよね。であれば、シングルクォートやワイルドカード文字への対応が 必須 かと。
どういうことでしょうか?シングルでは囲んでいますけど。というか検索結果は他のt_transmit以外の列名を入れれば表示はされるので
問題はROWFILTER内で(case t_transmit when 0 then '送信未処理' else '送信済み' end)as t_transmitなどを書くことが制限により?
出来ないということです。なので解決策を伺っているしだいです。
>
>>datagrid.DataBind();//データグリッドへバインド
> System.Windows.Forms.DataGrid や、
> System.Windows.Forms.DataGridView に、DataBind メソッドは無いような。
>
> もしかして、最初の質問時に
>>分類:[C#]
> を選択されていましたが……実際には [ASP.NET (C#)] なのではありませんか?
はい・・・申し訳ありません。
ASP.NETのC#です。

引用返信 編集キー/
■5364 / inTopicNo.12)  Re[7]: DATAVIEWのROWFILTERでの検索
□投稿者/ C#初心者 (8回)-(2007/07/11(Wed) 13:44:31)
出来ました。ありがとうございました。

解決済み
引用返信 編集キー/
■5365 / inTopicNo.13)  Re[7]: DATAVIEWのROWFILTERでの検索
□投稿者/ じゃかるた (51回)-(2007/07/11(Wed) 13:45:49)
2007/07/11(Wed) 13:48:06 編集(投稿者)

No5356 (じゃかるた さん) に返信
> ■No5353 (C#初心者 さん) に返信
>問題はROWFILTER内で(case t_transmit when 0 then '送信未処理' else '送信済み' end)as t_transmitなどを書くことが制限により?

とりあえずコードはこのままですよ。
>string sql = "select (case t_transmit when 0 then '送信未処理' else '送信済み' end)as t_transmit from tb_customer order by iden desc";

>string filter = "";
>filter += "(t_transmit LIKE '%"+Key[0]+"%' )";

ROWFILTER内ってどっちのこと「sql」?「filter」?

#済みですね。
解決済み
引用返信 編集キー/
■5368 / inTopicNo.14)  Re[8]: DATAVIEWのROWFILTERでの検索
□投稿者/ 魔界の仮面弁士 (339回)-(2007/07/11(Wed) 14:30:17)
# あえて、解決チェックを外した状態で投稿。


■No5362 (C#初心者 さん) に返信
> どういうことでしょうか?シングルでは囲んでいますけど。

そういうことではありません。テキストボックスに特殊文字が入力されていた場合の話です。
具体的な例を挙げてみれば、たとえば
 filter = "(t_transmit LIKE '%送信%' )";      // 「送信」を検索
のような内容であれば良いのですが、
 filter = "(t_transmit LIKE '%送*信%' )";     // 「送*信」を検索 → エラー
 filter = "(t_transmit LIKE '%送]信%' )";     // 「送]信」を検索 → エラー
といった文字列だと、DataView の処理がエラーになってしまう、ということです。

ですから、TextBox からそうした特殊な文字列が入ってきた場合に備え、
それぞれの特殊文字に対して適切なエスケープ処理を施したさなければなりません。

たとえば上記の例でいえば、処理後のフィルタの内容は、
 filter = "(t_transmit LIKE '%送[*]信%' )";     // 「送*信」を検索
 filter = "(t_transmit LIKE '%送[]]信%' )";     // 「送]信」を検索
などといった結果になるでしょう。

これらの特殊文字については、ヘルプで DataColumn クラスの Expression プロパティを調べると載っています。


> はい・・・申し訳ありません。
> ASP.NETのC#です。
分類の修正をお願いします。>投稿者 or 管理人s

引用返信 編集キー/
■5376 / inTopicNo.15)  Re[9]: DATAVIEWのROWFILTERでの検索
□投稿者/ C#初心者 (9回)-(2007/07/11(Wed) 16:37:40)
No5368 (魔界の仮面弁士 さん) に返信
> # あえて、解決チェックを外した状態で投稿。
>
>
> ■No5362 (C#初心者 さん) に返信
>>どういうことでしょうか?シングルでは囲んでいますけど。
>
> そういうことではありません。テキストボックスに特殊文字が入力されていた場合の話です。
> 具体的な例を挙げてみれば、たとえば
>  filter = "(t_transmit LIKE '%送信%' )"; // 「送信」を検索
> のような内容であれば良いのですが、
>  filter = "(t_transmit LIKE '%送*信%' )"; // 「送*信」を検索 → エラー
>  filter = "(t_transmit LIKE '%送]信%' )"; // 「送]信」を検索 → エラー
> といった文字列だと、DataView の処理がエラーになってしまう、ということです。
>
> ですから、TextBox からそうした特殊な文字列が入ってきた場合に備え、
> それぞれの特殊文字に対して適切なエスケープ処理を施したさなければなりません。
>
> たとえば上記の例でいえば、処理後のフィルタの内容は、
>  filter = "(t_transmit LIKE '%送[*]信%' )"; // 「送*信」を検索
>  filter = "(t_transmit LIKE '%送[]]信%' )"; // 「送]信」を検索
> などといった結果になるでしょう。
>
> これらの特殊文字については、ヘルプで DataColumn クラスの Expression プロパティを調べると載っています。
>
>
>>はい・・・申し訳ありません。
>>ASP.NETのC#です。
> 分類の修正をお願いします。>投稿者 or 管理人s

分類修正いたしました。申し訳ありません
そういうことでしたか、なるほど調べてみます。ご教授ありがとうございます。
引用返信 編集キー/
■5390 / inTopicNo.16)  Re[9]: DATAVIEWのROWFILTERでの検索
□投稿者/ C#初心者 (10回)-(2007/07/11(Wed) 21:01:36)
No5368 (魔界の仮面弁士 さん) に返信
> # あえて、解決チェックを外した状態で投稿。
>
>
> ■No5362 (C#初心者 さん) に返信
>>どういうことでしょうか?シングルでは囲んでいますけど。
>
> そういうことではありません。テキストボックスに特殊文字が入力されていた場合の話です。
> 具体的な例を挙げてみれば、たとえば
>  filter = "(t_transmit LIKE '%送信%' )"; // 「送信」を検索
> のような内容であれば良いのですが、
>  filter = "(t_transmit LIKE '%送*信%' )"; // 「送*信」を検索 → エラー
>  filter = "(t_transmit LIKE '%送]信%' )"; // 「送]信」を検索 → エラー
> といった文字列だと、DataView の処理がエラーになってしまう、ということです。
>
> ですから、TextBox からそうした特殊な文字列が入ってきた場合に備え、
> それぞれの特殊文字に対して適切なエスケープ処理を施したさなければなりません。
>
> たとえば上記の例でいえば、処理後のフィルタの内容は、
>  filter = "(t_transmit LIKE '%送[*]信%' )"; // 「送*信」を検索
>  filter = "(t_transmit LIKE '%送[]]信%' )"; // 「送]信」を検索
> などといった結果になるでしょう。
>
> これらの特殊文字については、ヘルプで DataColumn クラスの Expression プロパティを調べると載っています。
>
>
>>はい・・・申し訳ありません。
>>ASP.NETのC#です。
> 分類の修正をお願いします。>投稿者 or 管理人s


試したところ filter = "(t_transmit LIKE '%送[]]信%' )"; // 「送]信」を検索
ではエラーになりませんでした。
filter = "(t_transmit LIKE '%送[*]信%' )"; // 「送*信」を検索
だとエラーになりました。
エスケープ文字は列名に入るとエラーが返るそうです
ワイルドカードの場合エラーが出ていました。

引用返信 編集キー/
■5393 / inTopicNo.17)  Re[10]: DATAVIEWのROWFILTERでの検索
□投稿者/ 魔界の仮面弁士 (341回)-(2007/07/11(Wed) 22:28:47)
No5390 (C#初心者 さん) に返信
> filter = "(t_transmit LIKE '%送[*]信%' )";     // 「送*信」を検索
> だとエラーになりました。

正確なエラーの内容まで明記していただけますか?
あと、.NET Framework のバージョンも教えてください。


こちらとしては、v1.1 および v2.0 環境で、下記のソースを (csc.exeで)コンパイルして、
「送*信」を含む文字列が表示されることまで動作確認したうえで投稿していましたので、
問題は無いと思っていたのですけれど……何か環境依存するような部分があるのかも知れませんね。


using System;
using System.Windows.Forms;
using System.Data;

public class Form1 : Form
{
    public static void Main() { Application.Run(new Form1()); }

    public Form1()
    {
        DataGrid dataGrid1 = new DataGrid();
        dataGrid1.Dock = DockStyle.Fill;
        Controls.Add(dataGrid1);

        DataTable tbl = new DataTable();
        tbl.Columns.Add("t_transmit");
        tbl.Rows.Add(new object[] { "a送信b" });
        tbl.Rows.Add(new object[] { "a送*信b" });   // この行のみが表示されればOK
        tbl.Rows.Add(new object[] { "a送%信b" });
        tbl.Rows.Add(new object[] { "a送[信b" });
        tbl.Rows.Add(new object[] { "a送]信b" });
        tbl.Rows.Add(new object[] { "a送'信b" });
        tbl.Rows.Add(new object[] { "a送#信b" });

        string filter = "(t_transmit LIKE '%送[*]信%' )";

        DataView dv = new DataView(tbl);
        dv.RowFilter = filter;

        dataGrid1.DataSource = dv;
    }
}

引用返信 編集キー/
■5394 / inTopicNo.18)  Re[8]: DATAVIEWのROWFILTERでの検索
□投稿者/ じゃかるた (56回)-(2007/07/12(Thu) 09:23:49)
No5364 (C#初心者 さん) に返信
>送信未処理、送信済みに変換すると検索結果が表示されませんでした。
>出来ました。ありがとうございました

ついでで。
結局、原因はなんだったのでしょう?

引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -