質問編集履歴

5

並べ替えが機能したコードを追記

2021/05/19 00:15

投稿

tkm_43522
tkm_43522

スコア10

test CHANGED
File without changes
test CHANGED
@@ -26,6 +26,12 @@
26
26
 
27
27
  追記です。
28
28
 
29
+ 使用した並べ替え対象のデータ
30
+
31
+ ![使用した並べ替え対象のデータ](2e5c0929ddd395973a3674ae3938cd80.jpeg)
32
+
33
+
34
+
29
35
  test.aspx
30
36
 
31
37
  ```aspx

4

pageloadの記載漏れのため修正

2021/05/19 00:15

投稿

tkm_43522
tkm_43522

スコア10

test CHANGED
File without changes
test CHANGED
@@ -30,7 +30,7 @@
30
30
 
31
31
  ```aspx
32
32
 
33
- <%@ Page Language="vb" AutoEventWireup="false" CodeBehind="sorttest.aspx.vb" Inherits="pythontest.sorttest" %>
33
+ <%@ Page Language="vb" AutoEventWireup="false" CodeBehind="sorttest.aspx.vb" Inherits="test.sorttest" %>
34
34
 
35
35
 
36
36
 

3

pageloadの記載漏れのため修正

2021/05/19 00:08

投稿

tkm_43522
tkm_43522

スコア10

test CHANGED
File without changes
test CHANGED
@@ -28,39 +28,111 @@
28
28
 
29
29
  test.aspx
30
30
 
31
- ```HTML
32
-
33
- <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" DataKeyNames="フィールドa" AllowSorting="True" AllowCustomPaging="True" OnSorting="OnSorted" >
34
-
35
- <Columns>
36
-
37
- <asp:ButtonField ButtonType="Button" CommandName="select" HeaderText="選択" Text="選択">
38
-
39
- </asp:ButtonField>
40
-
41
- <asp:BoundField DataField="フィールドa" HeaderText="フィールドa" SortExpression="フィールドa" />
42
-
43
- <asp:ImageField DataImageUrlField="フィールドa" DataImageUrlFormatString="./test/images/{0}.png" HeaderText="イメージ">
44
-
45
- </asp:ImageField>
46
-
47
- <asp:BoundField DataField="フィールドb" HeaderText="フィールドb" SortExpression="フィールドb" />
48
-
49
- <asp:BoundField DataField="フィールドc" HeaderText="フィールドc" SortExpression="フィールドc" />
50
-
51
- <asp:BoundField DataField="フィールドd" HeaderText="フィールドd" SortExpression="フィールドd" />
52
-
53
- </Columns>
54
-
55
- <SortedAscendingHeaderStyle CssClass="sortedAscHeader" BackColor="#FFCCFF" />
56
-
57
- <SortedDescendingHeaderStyle CssClass="sortedDscHeader" BackColor="#99CCFF" />
58
-
59
- </asp:GridView>
60
-
61
-
62
-
63
- <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" SelectCommand="SELECT * FROM [datasheet] WHERE ([フィールドa] &lt;&gt; '') ORDER BY [フィールドa] ASC"/>
31
+ ```aspx
32
+
33
+ <%@ Page Language="vb" AutoEventWireup="false" CodeBehind="sorttest.aspx.vb" Inherits="pythontest.sorttest" %>
34
+
35
+
36
+
37
+ <!DOCTYPE html>
38
+
39
+
40
+
41
+ <html xmlns="http://www.w3.org/1999/xhtml">
42
+
43
+ <head runat="server">
44
+
45
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
46
+
47
+ <title></title>
48
+
49
+ <style type="text/css">
50
+
51
+ th.sortedAscHeader,
52
+
53
+ th.sortedDscHeader {
54
+
55
+ background-repeat: no-repeat;
56
+
57
+ background-position: right;
58
+
59
+ padding-right:18px;
60
+
61
+ }
62
+
63
+
64
+
65
+ th.sortedAscHeader {
66
+
67
+ background-image: url(Images/arrow-up.png);
68
+
69
+ }
70
+
71
+
72
+
73
+ th.sortedDscHeader {
74
+
75
+ background-image: url(Images/arrow-down.png);
76
+
77
+ }
78
+
79
+ </style>
80
+
81
+
82
+
83
+ </head>
84
+
85
+ <body>
86
+
87
+ <form id="form1" runat="server">
88
+
89
+ <div>
90
+
91
+ <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
92
+
93
+ <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" OnSorting="onsorting" PageSize="60" DataKeyNames="フィールドA">
94
+
95
+ <Columns>
96
+
97
+ <asp:CommandField ShowSelectButton="True" />
98
+
99
+ <asp:BoundField DataField="フィールドA" HeaderText="フィールドA" SortExpression="フィールドA" />
100
+
101
+ <asp:BoundField DataField="フィールドB" HeaderText="フィールドB" SortExpression="フィールドB" />
102
+
103
+ <asp:BoundField DataField="フィールドC" HeaderText="フィールドC" SortExpression="フィールドC" />
104
+
105
+ </Columns>
106
+
107
+ <SortedAscendingHeaderStyle CssClass="sortedAscHeader" BackColor="#FFCCFF" />
108
+
109
+
110
+
111
+ <SortedDescendingHeaderStyle CssClass="sortedDscHeader" BackColor="#99CCFF" />
112
+
113
+
114
+
115
+
116
+
117
+ </asp:GridView>
118
+
119
+ <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString3 %>" ProviderName="<%$ ConnectionStrings:ConnectionString3.ProviderName %>" SelectCommand="SELECT * FROM [sorttest]"></asp:SqlDataSource>
120
+
121
+
122
+
123
+ <asp:HiddenField ID="hiddenselectcommand" runat="server" />
124
+
125
+ <br />
126
+
127
+ <br />
128
+
129
+ </div>
130
+
131
+ </form>
132
+
133
+ </body>
134
+
135
+ </html>
64
136
 
65
137
 
66
138
 
@@ -74,7 +146,25 @@
74
146
 
75
147
 
76
148
 
149
+ Public Class sorttest
150
+
151
+ Inherits System.Web.UI.Page
152
+
153
+
154
+
155
+ Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
156
+
157
+ SqlDataSource1.SelectCommand = "Select * FROM [sorttest]" & hiddenselectcommand.Value
158
+
159
+
160
+
161
+ End Sub
162
+
163
+
164
+
165
+
166
+
77
- Protected Sub OnSorted(sender As Object, e As GridViewSortEventArgs) Handles GridView1.Sorting
167
+ Protected Sub OnSorting(sender As Object, e As GridViewSortEventArgs) Handles GridView1.Sorting
78
168
 
79
169
 
80
170
 
@@ -86,6 +176,8 @@
86
176
 
87
177
 
88
178
 
179
+
180
+
89
181
  If selectcommandstr.IndexOf("ASC") <> -1 Then
90
182
 
91
183
  direction = "DESC"
@@ -96,23 +188,59 @@
96
188
 
97
189
  End If
98
190
 
99
-
100
-
101
191
  If selectcommandstr.IndexOf("order") <> -1 Then selectcommandstr = selectcommandstr.Remove(selectcommandstr.IndexOf("order"))
102
192
 
103
193
  selectcommandstr = selectcommandstr & " order by IsNumeric([" & field & "]), Val([" & field & "]) " & direction & ", [" & field & "] " & direction & ""
104
194
 
105
195
 
106
196
 
197
+
198
+
107
199
  SqlDataSource1.SelectCommand = selectcommandstr
108
200
 
109
201
 
110
202
 
203
+ If selectcommandstr.IndexOf("where") <> -1 Then
204
+
205
+ selectcommandstr = selectcommandstr.Remove(0, selectcommandstr.IndexOf("where"))
206
+
207
+ Else
208
+
209
+
210
+
211
+ If selectcommandstr.IndexOf("order") <> -1 Then
212
+
213
+ selectcommandstr = selectcommandstr.Remove(0, selectcommandstr.IndexOf("order"))
214
+
215
+ Else
216
+
217
+ selectcommandstr = ""
218
+
219
+ End If
220
+
221
+ End If
222
+
223
+
224
+
225
+ hiddenselectcommand.Value = selectcommandstr
226
+
227
+
228
+
111
229
  e.Cancel = True
112
230
 
113
231
 
114
232
 
115
- End Sub
233
+ End Sub
234
+
235
+
236
+
237
+ Protected Sub GridView1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles GridView1.SelectedIndexChanged
238
+
239
+ TextBox1.Text = GridView1.SelectedValue.ToString
240
+
241
+ End Sub
242
+
243
+ End Class
116
244
 
117
245
 
118
246
 

2

asp:SqlDataSource が記載漏れだったため、修正

2021/05/19 00:06

投稿

tkm_43522
tkm_43522

スコア10

test CHANGED
File without changes
test CHANGED
@@ -57,6 +57,12 @@
57
57
  <SortedDescendingHeaderStyle CssClass="sortedDscHeader" BackColor="#99CCFF" />
58
58
 
59
59
  </asp:GridView>
60
+
61
+
62
+
63
+ <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" SelectCommand="SELECT * FROM [datasheet] WHERE ([フィールドa] &lt;&gt; '') ORDER BY [フィールドa] ASC"/>
64
+
65
+
60
66
 
61
67
 
62
68
 

1

並べ替えが機能したコードを追記

2021/05/18 06:58

投稿

tkm_43522
tkm_43522

スコア10

test CHANGED
File without changes
test CHANGED
@@ -21,3 +21,117 @@
21
21
 
22
22
 
23
23
  となるようにするにはどのようにすればよいでしょうか?
24
+
25
+
26
+
27
+ 追記です。
28
+
29
+ test.aspx
30
+
31
+ ```HTML
32
+
33
+ <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" DataKeyNames="フィールドa" AllowSorting="True" AllowCustomPaging="True" OnSorting="OnSorted" >
34
+
35
+ <Columns>
36
+
37
+ <asp:ButtonField ButtonType="Button" CommandName="select" HeaderText="選択" Text="選択">
38
+
39
+ </asp:ButtonField>
40
+
41
+ <asp:BoundField DataField="フィールドa" HeaderText="フィールドa" SortExpression="フィールドa" />
42
+
43
+ <asp:ImageField DataImageUrlField="フィールドa" DataImageUrlFormatString="./test/images/{0}.png" HeaderText="イメージ">
44
+
45
+ </asp:ImageField>
46
+
47
+ <asp:BoundField DataField="フィールドb" HeaderText="フィールドb" SortExpression="フィールドb" />
48
+
49
+ <asp:BoundField DataField="フィールドc" HeaderText="フィールドc" SortExpression="フィールドc" />
50
+
51
+ <asp:BoundField DataField="フィールドd" HeaderText="フィールドd" SortExpression="フィールドd" />
52
+
53
+ </Columns>
54
+
55
+ <SortedAscendingHeaderStyle CssClass="sortedAscHeader" BackColor="#FFCCFF" />
56
+
57
+ <SortedDescendingHeaderStyle CssClass="sortedDscHeader" BackColor="#99CCFF" />
58
+
59
+ </asp:GridView>
60
+
61
+
62
+
63
+ ```
64
+
65
+ test.aspx.vb
66
+
67
+ ```VB
68
+
69
+
70
+
71
+ Protected Sub OnSorted(sender As Object, e As GridViewSortEventArgs) Handles GridView1.Sorting
72
+
73
+
74
+
75
+ Dim field As String = e.SortExpression
76
+
77
+ Dim direction As String
78
+
79
+ Dim selectcommandstr As String = SqlDataSource1.SelectCommand
80
+
81
+
82
+
83
+ If selectcommandstr.IndexOf("ASC") <> -1 Then
84
+
85
+ direction = "DESC"
86
+
87
+ Else
88
+
89
+ direction = "ASC"
90
+
91
+ End If
92
+
93
+
94
+
95
+ If selectcommandstr.IndexOf("order") <> -1 Then selectcommandstr = selectcommandstr.Remove(selectcommandstr.IndexOf("order"))
96
+
97
+ selectcommandstr = selectcommandstr & " order by IsNumeric([" & field & "]), Val([" & field & "]) " & direction & ", [" & field & "] " & direction & ""
98
+
99
+
100
+
101
+ SqlDataSource1.SelectCommand = selectcommandstr
102
+
103
+
104
+
105
+ e.Cancel = True
106
+
107
+
108
+
109
+ End Sub
110
+
111
+
112
+
113
+ ```
114
+
115
+
116
+
117
+ 上記とすることで、gridviewのヘッダーをクリックするたびに昇順降順を切り替えて
118
+
119
+ 昇順
120
+
121
+ 1→2→10→20→30→あい→うえお
122
+
123
+ 降順
124
+
125
+ 30→20→10→2→1→うえお→あい
126
+
127
+ と並び替えられるようになりました、が、
128
+
129
+ e.cancelとしていることでgridviewの機能としては並び替わったことにならないため、SortedAscendingHeaderStyleが反映されなくなってしまいました。
130
+
131
+ できれば並び替わっている列とその向きがわかるようにしたいのですが、gridviewのsortイベントを介さずにgiridviewに現在並び替えられているフィールドとその向きを設定するなどして、すでに並び替わったことに出来ないでしょうか。
132
+
133
+ gridview.SortDirectionを書き換えようとしてみましたが、readonlyのため無理なようでした。
134
+
135
+
136
+
137
+ 追加ですみませんが、ご存知の方がいらっしゃいましたら教えて下さい。