回答編集履歴

2

具体的方法の追記

2016/10/05 03:47

投稿

退会済みユーザー
test CHANGED
@@ -197,3 +197,289 @@
197
197
  ただし、やはりブラウザ依存のようで(text-overflow:ellipsis はもともと IE の独自拡張)、自分が試した限りでは IE9, Firefox 49.0.1, Chrome 49.0.2623.112 m, Safari 5.1.7 (7534.57.2) では OK だったものの、Opera 12.18 では三点リーダーが表示されませんでした。
198
198
 
199
199
 
200
+
201
+ 【2016/10/5 12:48 追記】
202
+
203
+
204
+
205
+ 私の 2016/10/05 12:09 のコメントで、
206
+
207
+
208
+
209
+ > 「やり方の問題」とか書いておいて、そうではなかったりすると何なので、後で検証して結果を回答欄に追記しておきます。
210
+
211
+
212
+
213
+ と書きましたように、上の【2016/10/4 12:45 追記】 のサンプルに DataTables を適用して検証してみました。
214
+
215
+
216
+
217
+ 結果は以下の画像のとおりで、「三点リーダー」は表示されます。
218
+
219
+
220
+
221
+ http://surferonwww.info/BlogEngine/image.axd?picture=2016%2f9%2fgridviewanddatatables.jpg
222
+
223
+
224
+
225
+ 質問者さんが試してダメだったのは、多分横方向のスクロール scrollX: true を設定したからだと思います。
226
+
227
+
228
+
229
+ scrollX: true があると columnDefs: [ ... ] で幅を設定しても無視され、文字列分の幅が確保されるので結果「三点リーダー」は表示されないということになるようです。(理由は不明。実際に試してそうなりました)
230
+
231
+
232
+
233
+ 上の画像のコードは以下の通りです。コメントアウトした scrollX: true, を有効にして試すと上で私が言ったことが分かると思います。
234
+
235
+
236
+
237
+ ```
238
+
239
+ <%@ Page Language="C#" %>
240
+
241
+ <%@ Import Namespace="System.Data" %>
242
+
243
+
244
+
245
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
246
+
247
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
248
+
249
+
250
+
251
+ <script runat="server">
252
+
253
+ // データソース用の DataTable を作成
254
+
255
+ protected DataTable CreateDataTable()
256
+
257
+ {
258
+
259
+ DataTable dt = new DataTable();
260
+
261
+ DataRow dr;
262
+
263
+
264
+
265
+ dt.Columns.Add(new DataColumn("ID", typeof(Int32)));
266
+
267
+ dt.Columns.Add(new DataColumn("Name", typeof(string)));
268
+
269
+ dt.Columns.Add(new DataColumn("Type", typeof(string)));
270
+
271
+ dt.Columns.Add(new DataColumn("Price", typeof(Int32)));
272
+
273
+ dt.Columns.Add(new DataColumn("Qty", typeof(Int32)));
274
+
275
+ dt.Columns.Add(new DataColumn("Amount", typeof(Int32)));
276
+
277
+ dt.Columns.Add(new DataColumn("CategoryID", typeof(Int32)));
278
+
279
+ dt.Columns.Add(new DataColumn("Note", typeof(string)));
280
+
281
+ dt.Columns.Add(new DataColumn("Discontinued", typeof(bool)));
282
+
283
+ dt.Columns.Add(new DataColumn("DateTime", typeof(DateTime)));
284
+
285
+
286
+
287
+ for (int i = 0; i < 20; i++)
288
+
289
+ {
290
+
291
+ dr = dt.NewRow();
292
+
293
+ dr["ID"] = i;
294
+
295
+ dr["Name"] = (i % 2 == 0) ?
296
+
297
+ "Name_" + i.ToString() : "Long Long Name_" + i.ToString();
298
+
299
+ dr["Type"] = (i % 2 == 0) ?
300
+
301
+ "Long Long Product Type " + (100 - i).ToString() : "Type " + (100 - i).ToString();
302
+
303
+ dr["Price"] = 123000 * (i + 1);
304
+
305
+ dr["Qty"] = (i + 1) * 20;
306
+
307
+ dr["Amount"] = 123000 * (i + 1) * (i + 1);
308
+
309
+ dr["CategoryID"] = 100 - i;
310
+
311
+ dr["Note"] = "Note_" + i.ToString();
312
+
313
+ dr["Discontinued"] = (i % 2 == 0) ? true : false;
314
+
315
+ dr["DateTime"] = DateTime.Now.AddDays(i);
316
+
317
+ dt.Rows.Add(dr);
318
+
319
+ }
320
+
321
+ return dt;
322
+
323
+ }
324
+
325
+
326
+
327
+ // GridView に上記メソッドで作った DataTable をバインド
328
+
329
+ protected void Page_Load(object sender, EventArgs e)
330
+
331
+ {
332
+
333
+ if (!IsPostBack)
334
+
335
+ {
336
+
337
+ GridView1.DataSource = CreateDataTable();
338
+
339
+ GridView1.DataBind();
340
+
341
+ }
342
+
343
+ }
344
+
345
+
346
+
347
+ // GridView に thead, tbody, tfoot 要素を追加
348
+
349
+ protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
350
+
351
+ {
352
+
353
+ if (e.Row.RowType == DataControlRowType.Header)
354
+
355
+ {
356
+
357
+ e.Row.TableSection =
358
+
359
+ System.Web.UI.WebControls.TableRowSection.TableHeader;
360
+
361
+ }
362
+
363
+ else if (e.Row.RowType == DataControlRowType.DataRow)
364
+
365
+ {
366
+
367
+ e.Row.TableSection =
368
+
369
+ System.Web.UI.WebControls.TableRowSection.TableBody;
370
+
371
+ }
372
+
373
+ else if (e.Row.RowType == DataControlRowType.Footer)
374
+
375
+ {
376
+
377
+ e.Row.TableSection =
378
+
379
+ System.Web.UI.WebControls.TableRowSection.TableFooter;
380
+
381
+ }
382
+
383
+ }
384
+
385
+ </script>
386
+
387
+
388
+
389
+ <html xmlns="http://www.w3.org/1999/xhtml">
390
+
391
+ <head runat="server">
392
+
393
+ <title></title>
394
+
395
+ <script src="/Scripts/jquery-1.11.1.js" type="text/javascript"></script>
396
+
397
+ <script src="/datatables-1.10.12/js/jquery.dataTables.js" type="text/javascript"></script>
398
+
399
+ <link href="/datatables-1.10.12/css/jquery.dataTables.css" rel="stylesheet" type="text/css" />
400
+
401
+ <script type="text/javascript">
402
+
403
+ //<![CDATA[
404
+
405
+ $(document).ready(function () {
406
+
407
+ $("#<%=GridView1.ClientID%>").DataTable({
408
+
409
+ // scrollX: true,
410
+
411
+ // scrollY: 200,
412
+
413
+ columnDefs: [
414
+
415
+ { targets: 0, width: 50 },
416
+
417
+ { targets: 1, width: 100 },
418
+
419
+ { targets: 2, width: 100 }
420
+
421
+ ]
422
+
423
+ });
424
+
425
+ });
426
+
427
+ //]]>
428
+
429
+ </script>
430
+
431
+
432
+
433
+ <style type="text/css">
434
+
435
+ table {
436
+
437
+ width: 100%;
438
+
439
+ table-layout: fixed;
440
+
441
+ }
442
+
443
+
444
+
445
+ table th, td {
446
+
447
+ white-space: nowrap;
448
+
449
+ overflow: hidden;
450
+
451
+ text-overflow: ellipsis;
452
+
453
+ }
454
+
455
+
456
+
457
+ </style>
458
+
459
+
460
+
461
+ </head>
462
+
463
+ <body>
464
+
465
+ <form id="form1" runat="server">
466
+
467
+ <asp:GridView ID="GridView1"
468
+
469
+ runat="server"
470
+
471
+ EnableViewState="False"
472
+
473
+ OnRowCreated="GridView1_RowCreated"
474
+
475
+ ShowFooter="True">
476
+
477
+ </asp:GridView>
478
+
479
+ </form>
480
+
481
+ </body>
482
+
483
+ </html>
484
+
485
+ ```

1

具体的方法の追記

2016/10/05 03:47

投稿

退会済みユーザー
test CHANGED
@@ -5,3 +5,195 @@
5
5
  GridView に overflow 適用
6
6
 
7
7
  http://surferonwww.info/BlogEngine/post/2015/11/10/apply-overflow-to-a-column-of-gridview.aspx
8
+
9
+
10
+
11
+ 【2016/10/4 12:45 追記】
12
+
13
+
14
+
15
+ 私の 2016/10/04 12:08 のコメントでも書きましたが、td 要素に overflow: hidden;、white-space: nowrap;、text-overflow: ellipsis; というスタイルを適用して期待通り三点リーダーが表示されたのは、親の table 要素に table-layout: fixed; というスタイルが適用されていたからでした。
16
+
17
+
18
+
19
+ DataTables にはもともと「三点リーダー」にするようなスタイルは適用されていないようですが、そうであれば親の table 要素に table-layout: fixed; というスタイルを、子の th, td 要素に overflow: hidden;、white-space: nowrap;、text-overflow: ellipsis; というスタイルを適用したらいかがでしょう?
20
+
21
+
22
+
23
+ コメントに「あとで、回答欄に GridView ではどのようにできるかという例を書いておきます」と書きましたが、検証に使ったサンプルコードを以下に書いておきます。Web サイトプロジェクトならそのままコピペして、Web アプリケーションプロジェクトなら .aspx と .aspx.cs に分ければ試すことができますので、興味があればやってみてください。
24
+
25
+
26
+
27
+ ```
28
+
29
+ <%@ Page Language="C#" %>
30
+
31
+ <%@ Import Namespace="System.Data" %>
32
+
33
+
34
+
35
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
36
+
37
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
38
+
39
+
40
+
41
+ <script runat="server">
42
+
43
+ // データソース用の DataTable を作成
44
+
45
+ protected DataTable CreateDataTable()
46
+
47
+ {
48
+
49
+ DataTable dt = new DataTable();
50
+
51
+ DataRow dr;
52
+
53
+
54
+
55
+ dt.Columns.Add(new DataColumn("ID", typeof(Int32)));
56
+
57
+ dt.Columns.Add(new DataColumn("Name", typeof(string)));
58
+
59
+ dt.Columns.Add(new DataColumn("Type", typeof(string)));
60
+
61
+ dt.Columns.Add(new DataColumn("Price", typeof(Int32)));
62
+
63
+ dt.Columns.Add(new DataColumn("Qty", typeof(Int32)));
64
+
65
+ dt.Columns.Add(new DataColumn("Amount", typeof(Int32)));
66
+
67
+ dt.Columns.Add(new DataColumn("CategoryID", typeof(Int32)));
68
+
69
+ dt.Columns.Add(new DataColumn("Note", typeof(string)));
70
+
71
+ dt.Columns.Add(new DataColumn("Discontinued", typeof(bool)));
72
+
73
+ dt.Columns.Add(new DataColumn("DateTime", typeof(DateTime)));
74
+
75
+
76
+
77
+ for (int i = 0; i < 20; i++)
78
+
79
+ {
80
+
81
+ dr = dt.NewRow();
82
+
83
+ dr["ID"] = i;
84
+
85
+ dr["Name"] = "Product Name_" + i.ToString();
86
+
87
+ dr["Type"] = "Product Type " + (100 - i).ToString();
88
+
89
+ dr["Price"] = 123000 * (i + 1);
90
+
91
+ dr["Qty"] = (i + 1) * 20;
92
+
93
+ dr["Amount"] = 123000 * (i + 1) * (i + 1);
94
+
95
+ dr["CategoryID"] = 100 - i;
96
+
97
+ dr["Note"] = "Note_" + i.ToString();
98
+
99
+ dr["Discontinued"] = (i % 2 == 0) ? true : false;
100
+
101
+ dr["DateTime"] = DateTime.Now.AddDays(i);
102
+
103
+ dt.Rows.Add(dr);
104
+
105
+ }
106
+
107
+ return dt;
108
+
109
+ }
110
+
111
+
112
+
113
+ // GridView に上記メソッドで作った DataTable をバインド
114
+
115
+ protected void Page_Load(object sender, EventArgs e)
116
+
117
+ {
118
+
119
+ if (!IsPostBack)
120
+
121
+ {
122
+
123
+ GridView1.DataSource = CreateDataTable();
124
+
125
+ GridView1.DataBind();
126
+
127
+ }
128
+
129
+ }
130
+
131
+ </script>
132
+
133
+
134
+
135
+ <html xmlns="http://www.w3.org/1999/xhtml">
136
+
137
+ <head runat="server">
138
+
139
+ <title></title>
140
+
141
+ <style type="text/css">
142
+
143
+ table {
144
+
145
+ width: 100%;
146
+
147
+ table-layout: fixed;
148
+
149
+ }
150
+
151
+
152
+
153
+ table th, td {
154
+
155
+ white-space: nowrap;
156
+
157
+ overflow: hidden;
158
+
159
+ text-overflow: ellipsis;
160
+
161
+ }
162
+
163
+
164
+
165
+ </style>
166
+
167
+ </head>
168
+
169
+ <body>
170
+
171
+ <form id="form1" runat="server">
172
+
173
+ <asp:GridView ID="GridView1" runat="server" EnableViewState="False">
174
+
175
+ </asp:GridView>
176
+
177
+ </form>
178
+
179
+ </body>
180
+
181
+ </html>
182
+
183
+
184
+
185
+ ```
186
+
187
+
188
+
189
+ 上のコードの実行結果は以下の画像のようになります。(ブラウザは Chrome)
190
+
191
+
192
+
193
+ http://surferonwww.info/BlogEngine/image.axd?picture=2016%2f9%2fgridviewtextoverflow.jpg
194
+
195
+
196
+
197
+ ただし、やはりブラウザ依存のようで(text-overflow:ellipsis はもともと IE の独自拡張)、自分が試した限りでは IE9, Firefox 49.0.1, Chrome 49.0.2623.112 m, Safari 5.1.7 (7534.57.2) では OK だったものの、Opera 12.18 では三点リーダーが表示されませんでした。
198
+
199
+