OR検索の結果をgridviewに表示しています。
しかし、
<br>タグがそのまま表示されてしまいます。
調べてみますと、
htmlEncode=false
をするといいのかな?と思ったのですが、
どのように記述していいのかわからず、
エラーが出てしまいます。
サイトで検索をかけるのですが、
希望に近いかなと思うものが、datagridviewの情報であったり、動的に作成するものであっても、
C#のコードであったりで、うまく見つけることができませんでした。
DB(ACCESS)のデータを直接バインドして、
<td><%#Container.DataItem("Content")%></td> のケースだと、 <br>も効いたりするのですが、 サニタイズされてしまっているのか? されているとしたらどのように記述したらいいのか? そもそもの原因が違うのか? わからずに悩んでいます。SELECT文でOR検索が出来たらいいのですが、
自分の技術が足りないため、思ったようなOR検索ができなかったため、
一度、変数に格納して処理をして、表示しています。
### 追記
開発環境
・Windows10
・.NET Framework 4.8.04084
・Microsoft Visual Studio Community 2019 Version 16.7.5
題名のOR、ANDについて
id | content | content2 |
---|---|---|
1 | a | b |
2 | c | d |
3 | e | f |
OR検索の場合:
例1)a cで検索をかけると、idの1と2の行のみ検索画面に出るようにしています。
例2)a bで検索をかけると、idの1の行のみ検索画面に出るようにしています。
AND検索の場合:
例1)a cで検索をかけると、検索にヒットしないようにしています。
例2)a bで検索をかけると、idの1の行のみ検索画面に出るようにしています。
今回、検索部分はOR検索固定ですが、
AND検索とOR検索をラジオボタンで切り替えれるように今後する予定です。
テーブルについて
Access のテーブルは一つです。
テーブル名「post」の中に、ID, Content, Content2 という 3 つのフィールドがあります。
この中にあるデータにAND検索、もしくは、OR検索します。
そのために、
それぞれのDBデータを一時的に変数に格納して、その変数と検索キーワード(検索ボックスに入力したもの)と一致するもののみを配列に格納して、格納したデータを表示するようにしています。
項目は、content、content2と、今回は2つですが、実際はもう少し多くなります。
<br>に関して
Accessのデータ上に<br>としております。
gridviewで表示されたときに、<br>のところで改行表示したいです。
例)ACCESSのデータ
あいうえお<br>かきくけこ<br>さしすせそ
としたら、
実際の表示では、
あいうえお
かきくけこ
さしすせそ
のように表示するようにしたいです。
ACCESSのデータ上で<br>ではなく、
つまり、
あいうえお<br>かきくけこ<br>さしすせそ
ではなく、
あいうえお かきくけこ さしすせそ
であっても、
実際の表示が、
あいうえお
かきくけこ
さしすせそ
になれば、問題ありません。
aspx
1 2<%@ Import Namespace="System.Data" %> 3<%@ Import Namespace="System.Data.oleDb" %> 4<%@ Import Namespace="System" %> 5<%@ Import Namespace="System.IO" %> 6<%@ Import Namespace="System.Web.UI.HtmlControls" %> 7<%@ Import Namespace="System.Windows.Forms" %> 8 9 10<script runat="server" language="VB"> 11 12 Dim pairs 13 Dim w_word 14 Dim cond = "or" 15 Dim countX 16 Dim t_log 17 Dim find_t_all() 18 Dim find_t 19 20 Dim p_ID 21 Dim p_Content 22 Dim p_Content2 23 24 Dim dt As New DataTable 25 Dim row As DataRow 26 27 Public Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 28 Dim postD() As Object = Nothing 29 Dim rec As String = "" 30 Dim i As Integer = 0 31 Dim count As Integer = 0 32 Dim search = TextBox1.Text 33 Dim w_word = TextBox1.Text 34 Dim w_max = 1000 35 ReDim Preserve find_t_all(w_max - 1) 36 37 If w_word <> "" Then 38 w_word = Replace(w_word, " ", " ") 39 pairs = Split(w_word, " ") 40 countX = 0 41 42 43 Try 44 count = GetpostAll(postD) 45 If count > 0 Then 46 Dim dt As New DataTable("GridView1") 47 dt.Columns.Add("No") 48 dt.Columns.Add("Content") 49 dt.Columns.Add("Content2") 50 51 countX = 0 52 For Each Wkf_AllLog In find_t_all 53 countX = countX + 1 54 find_t = Split(Wkf_AllLog, "<>") 55 If UBound(find_t) >= 1 Then 56 p_ID = find_t(0) 57 p_Content = find_t(1) 58 p_Content2 = find_t(2) 59 Else 60 Exit For 61 End If 62 63 row = dt.NewRow 64 row("No") = p_ID 65 row("Content") = p_Content 66 row("Content2") = p_Content2 67 dt.Rows.Add(row) 68 Next 69 dt.AcceptChanges() 70 GridView1.DataSource = dt 71 GridView1.DataBind() 72 Else 73 Response.Write("レコードがありません") 74 End If 75 Catch ex As Exception 76 Response.Write(ex.ToString) 77 End Try 78 End If 79 End Sub 80 81 82 Public Function GetpostAll(ByVal postD() As Object) As Integer 83 Dim con As New OleDbConnection() 84 Dim cmd As New OleDbCommand() 85 Try 86 87 con.ConnectionString = 88"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & 89Server.MapPath("sample.mdb") 90 cmd.Connection = con 91 con.Open() 92 93 cmd.CommandText = "Select COUNT(*) FROM post" 94 95 96 Dim count As Integer = CInt(cmd.ExecuteScalar) 97 98 99 If count > 0 Then 100 cmd.CommandText = "Select * FROM post ORDER BY id" 101 102 Dim rs As OleDbDataReader 103 rs = cmd.ExecuteReader() 104 105 Try 106 Dim i As Integer = -1 107 Dim Wk_flag 108 109 While rs.Read() 110 Wk_flag = 0 111 i = i + 1 112 p_ID = CStr(rs("id")) 113 If IsDBNull(rs("Content")) Then 114 p_Content = "" 115 Else 116 p_Content = rs("Content") 117 End If 118 If IsDBNull(rs("Content2")) Then 119 p_Content2 = "" 120 Else 121 p_Content2 = rs("Content2") 122 End If 123 124 For Each Wk_pair In pairs 125 If (InStr(p_Content, Wk_pair) > 0 Or InStr(p_Content2, Wk_pair) > 0) Then 126 Wk_flag = 1 127 If cond = "Or" Then 128 Exit For 129 End If 130 Else 131 If cond = "And" Then 132 Wk_flag = 0 133 Exit For 134 End If 135 End If 136 Next 137 If Wk_flag <> 0 Then 138 countX = countX + 1 139 t_log = p_ID & "<>" & p_Content & "<>" & p_Content2 140 find_t_all(countX - 1) = t_log 141 End If 142 143 End While 144 145 Catch ex As Exception 146 Throw New Exception(ex.ToString) 147 Finally 148 If Not rs Is Nothing Then 149 rs.Close() 150 End If 151 End Try 152 End If 153 154 Return count 155 156 Catch ex As Exception 157 Throw New Exception(ex.ToString) 158 Finally 159 If Not con Is Nothing Then 160 con.Close() 161 End If 162 End Try 163 End Function 164</script> 165 166 167<html> 168<body> 169 <form id="form1" runat="server"> 170 <asp:TextBox ID="TextBox1" name="search" runat="server" textvalue="search"></asp:TextBox> 171 <asp:Button ID="Button1" runat="server" type="submit" Text="検索"/> 172 <asp:GridView ID = "GridView1" runat="server" CellPadding="4" ForeColor="Black" Width="100%" BorderColor="#999999" BorderStyle="Solid" BorderWidth="3px" CellSpacing="2"> 173 </asp:GridView> 174 </form> 175</body> 176</html> 177 178
データベース(ACCESS)のデータ
ID ・・・ オートナンバー
Content ・・・ 長いテキスト
Content2 ・・・ 長いテキスト
例)
id | content | content2 |
---|---|---|
1 | てすと<br>てすと | さんぷる<br>さんぷる |
2 | hoge<br>hoge | sample<br>desu |
回答2件
あなたの回答
tips
プレビュー