質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

2543閲覧

ACCESSのデータを検索(OR、もしくはAND)して、gridviewに改行タグも反映して表示したい

ruuuki

総合スコア4

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2021/05/16 07:17

編集2021/05/16 13:09

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について

idcontentcontent2
1ab
2cd
3ef

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 ・・・ 長いテキスト

例)

idcontentcontent2
1てすと<br>てすとさんぷる<br>さんぷる
2hoge<br>hogesample<br>desu

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/05/16 07:48 編集

開発環境(OS, .NET Framework, Visual Studio のバージョンなど)を書いてください。 「ACCESSのデータを検索(OR、もしくはAND)」の AND とか OR というのはどういうことでしょう? コードを読まなくても分かるように具体例を書いてください。対象とする Access のテーブルは一つだけで、その中に ID, Content, Content2 という 3 つのフィールドがあるのですよね? それを AND とか OR するのですか? どのように? Content, Content2 の文字列の中に <br> という文字列があるが、現状 html にレンダリングされるときにエスケープされて &lt;br&gt; となってしまうのでエスケープされないようにしたいということですか? そうでないとすると、何がどうなっていてどうしたいのでしょう? 以上の件を質問欄を編集して追加情報として追記願います。
sazi

2021/05/16 10:55 編集

> <br>タグがそのまま表示されてしまいます。 Accessのデータ上は<br>という文字でなく改行コードということですか? > SELECT文でOR検索が出来たらいいのですが TextBox1には空白区切りで検索ワードを入力し、その検索ワードをorまたはANDいずれかの条件で、「content」および「content2」を検索するという事ですか?
ruuuki

2021/05/16 13:02

SurferOnWww様 情報修正、追記いたしました。 ご指摘いただき、ありがとうございます! sazi様 ありがとうございます! <br>タグについてですが、 ACCESSのデータ上で、<br>としていますが、 改行表示されるのでしたら、<br>無しであっても、問題ありません。 SELECT文でOR検索についてですが、 おっしゃるとおり、空白区切りで検索ワードを入力して、 その検索ワードをorまたはANDいずれかの条件で、 「content」および「content2」を検索するという事です。 現状は、OR検索固定にしておりますが、 ラジオボタンなどで、切り替えできるように今後していく予定です。 表示としては、 アクセス上のデータでの改行を、 実際表示で、その部分で改行するようにしたいです。
guest

回答2

0

ACCESSのデータを検索(OR、もしくはAND)して、gridviewに改行タグも反映して表示したい

取りあえず「OR、もしくはAND」は置いといて、Access のデータ一覧を <br> で改行して表示できるようにしてください。

まずは SqlDataSource と GridView をツールボックスからドラッグ&ドロップし、デザイン画面でウィザードを使って一覧表示ができるアプリを作ってください。ソースは以下のようになります。

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="207-AccesSample.aspx.cs" Inherits="_207_AccesSample" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:Access %>" ProviderName="<%$ ConnectionStrings:Access.ProviderName %>" SelectCommand="SELECT [ID], [Info1], [Info2] FROM [XXX]"> </asp:SqlDataSource> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ID" DataSourceID="SqlDataSource1"> <Columns> <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" ReadOnly="True" SortExpression="ID" /> <asp:BoundField DataField="Info1" HeaderText="Info1" SortExpression="Info1" /> <asp:BoundField DataField="Info2" HeaderText="Info2" SortExpression="Info2" /> </Columns> </asp:GridView> </form> </body> </html>

そのコードで、改行を除いては期待通りレコード一覧が表示できることを確認できたら、デザイン画面で対象の BoundField の HtmlEncode プロパティを False に設定します。

イメージ説明

それで改行されるはずです。まずはそこまでできるようにしてください。AND, OR はそれができてからの話にしたいと思います。

投稿2021/05/16 14:23

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ruuuki

2021/05/16 15:29

SurferOnWww様 詳しく教えてくださり、ありがとうございます^^ せっかく教えていただいたのですが、SqlDataSource と GridViewをツールボックスにいれたのですが、SqlDataSourceの「SqlDataSourceは不明な要素です」と表示され、かなり初歩的なところかと思うのですが、その時点で躓いてしまいました・・・ ただ、今回は、 gridviewの自動生成をやめ、 <Columns> <asp:TemplateField> <HeaderTemplate> <table border="1" width="100%" style="border-collapse:collapse;"> <tr> <th>id</th> <th>content</th> <th>content2</th> </tr> </HeaderTemplate> <ItemTemplate> <tr> <td><%#Container.DataItem("id")%></td> <td><%#Container.DataItem("Content")%></td> <td><%#Container.DataItem("Content2")%></td> </tr> </ItemTemplate> <FooterTemplate> </table> </FooterTemplate> </asp:TemplateField> </Columns> と追記することでできました^^ ありがとうございました!
guest

0

ベストアンサー

gridviewで表示されたときに、<br>のところで改行表示したいです。

TemplateFieldを使用すると良さそうです。
以下参考
ASP.NET 取得したデータ内に改行がある場合、GridViewで改行されない。

※抽出に関しては取り敢えず出来ているんですよね。

投稿2021/05/16 13:27

sazi

総合スコア25327

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ruuuki

2021/05/16 15:21

sazi様 はい、抽出に関しては出来ております^^ 参考サイトをみて、TemplateFieldというのを使うことで解決いたしました! gridviewの自動生成をやめ、 <Columns> <asp:TemplateField> <HeaderTemplate> <table border="1" width="100%" style="border-collapse:collapse;"> <tr> <th>id</th> <th>content</th> <th>content2</th> </tr> </HeaderTemplate> <ItemTemplate> <tr> <td><%#Container.DataItem("id")%></td> <td><%#Container.DataItem("Content")%></td> <td><%#Container.DataItem("Content2")%></td> </tr> </ItemTemplate> <FooterTemplate> </table> </FooterTemplate> </asp:TemplateField> </Columns> と追記することでできました^^ ありがとうございます^^
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問