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

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

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

Re[15]: DataGridViewで予期せぬ所で改行してしまう


(過去ログ 133 を表示中)

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

■78277 / inTopicNo.1)  DataGridViewで予期せぬ所で改行してしまう
  
□投稿者/ 綾瀬さとみ (5回)-(2016/01/03(Sun) 05:03:41)

分類:[C#] 

C#のDataGridViewで一つのセルに複数行表示したく

dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
this.dataGridView1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells;
this.dataGridView1.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells;

この様に設定しています。
次のように行を代入します。
///////////////////////////////////////////////////////////////////////////////////////////////////////
string[] s = new string[]{"あいうえお" + Environment.NewLine +
                          "かきくけこ",

                           "あいうえおかきくけこさしすせそたちつてとなにぬねの" + Environment.NewLine +
                           "アイウエオ",

                           "あいうえおかきくけこ"};

for (int x = 0; x < s.Length; x++)
{
dataGridView1.Rows.Add(s[x]);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
しかし、以下の様に表示させたいのですが

-----------------------------------------------
あいうえお
かきくけこ
-----------------------------------------------
あいうえおかきくけこさしすせそたちつてとなにぬねの
アイウエオ
-----------------------------------------------
あいうえおかきくけこ
-----------------------------------------------

思わぬところ(2行目)で改行されてしまい以下のようになってしまいます。

-----------------------------------------------
あいうえお
かきくけこ
-----------------------------------------------
あいうえおかきくけこさしすせそたちつて
となにぬねの
アイウエオ
-----------------------------------------------

あいうえおかきくけこ

-----------------------------------------------

また、3行目は1行なのにも関わらず、前の行の設定に引っ張られて
行の高さがフィットせず、余白が多くなってしまいます。

2行目をしっかり、2行で表示し、全ての行の高さを内容に合わせてフィットさせるようにするにはどうしたらよいでしょうか?
よろしくお願い申し上げます。

以下に、DataGridViewの他の設定を明記します。
///////////////////////////////////////////////////////////////////////////////////////////////////////
// 
            // dataGridView1
            // 
            this.dataGridView1.AllowUserToAddRows = false;
            this.dataGridView1.AllowUserToDeleteRows = false;
            this.dataGridView1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells;
            this.dataGridView1.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells;
            this.dataGridView1.ColumnHeadersVisible = false;
            this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
            this.Column1,
            this.Column2});
            dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
            dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Window;
            dataGridViewCellStyle2.Font = new System.Drawing.Font("MS UI Gothic", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(128)));
            dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.ControlText;
            dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight;
            dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
            dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
            this.dataGridView1.DefaultCellStyle = dataGridViewCellStyle2;
            this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Fill;
            this.dataGridView1.Location = new System.Drawing.Point(0, 0);
            this.dataGridView1.Margin = new System.Windows.Forms.Padding(0);
            this.dataGridView1.Name = "dataGridView1";
            this.dataGridView1.RowHeadersVisible = false;
            this.dataGridView1.RowTemplate.Height = 21;
            this.dataGridView1.Size = new System.Drawing.Size(550, 573);
            this.dataGridView1.TabIndex = 0;

引用返信 編集キー/
■78294 / inTopicNo.2)  Re[1]: DataGridViewで予期せぬ所で改行してしまう
□投稿者/ 石原はるか (1回)-(2016/01/06(Wed) 07:58:16)
No78277 (綾瀬さとみ さん) に返信
> C#のDataGridViewで一つのセルに複数行表示したく
>
> dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
> this.dataGridView1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells;
> this.dataGridView1.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells;
>
> この様に設定しています。
> 次のように行を代入します。
> ///////////////////////////////////////////////////////////////////////////////////////////////////////
> string[] s = new string[]{"あいうえお" + Environment.NewLine +
> "かきくけこ",
>
> "あいうえおかきくけこさしすせそたちつてとなにぬねの" + Environment.NewLine +
> "アイウエオ",
>
> "あいうえおかきくけこ"};
>
> for (int x = 0; x < s.Length; x++)
> {
> dataGridView1.Rows.Add(s[x]);
> }
> ///////////////////////////////////////////////////////////////////////////////////////////////////////
> しかし、以下の様に表示させたいのですが
>
> -----------------------------------------------
> あいうえお
> かきくけこ
> -----------------------------------------------
> あいうえおかきくけこさしすせそたちつてとなにぬねの
> アイウエオ
> -----------------------------------------------
> あいうえおかきくけこ
> -----------------------------------------------
>
> 思わぬところ(2行目)で改行されてしまい以下のようになってしまいます。
>
> -----------------------------------------------
> あいうえお
> かきくけこ
> -----------------------------------------------
> あいうえおかきくけこさしすせそたちつて
> となにぬねの
> アイウエオ
> -----------------------------------------------
>
> あいうえおかきくけこ
>
> -----------------------------------------------
>
> また、3行目は1行なのにも関わらず、前の行の設定に引っ張られて
> 行の高さがフィットせず、余白が多くなってしまいます。
>
> 2行目をしっかり、2行で表示し、全ての行の高さを内容に合わせてフィットさせるようにするにはどうしたらよいでしょうか?
> よろしくお願い申し上げます。
>
> 以下に、DataGridViewの他の設定を明記します。
> ///////////////////////////////////////////////////////////////////////////////////////////////////////
> //
> // dataGridView1
> //
> this.dataGridView1.AllowUserToAddRows = false;
> this.dataGridView1.AllowUserToDeleteRows = false;
> this.dataGridView1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells;
> this.dataGridView1.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells;
> this.dataGridView1.ColumnHeadersVisible = false;
> this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
> this.Column1,
> this.Column2});
> dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
> dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Window;
> dataGridViewCellStyle2.Font = new System.Drawing.Font("MS UI Gothic", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(128)));
> dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.ControlText;
> dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight;
> dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
> dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
> this.dataGridView1.DefaultCellStyle = dataGridViewCellStyle2;
> this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Fill;
> this.dataGridView1.Location = new System.Drawing.Point(0, 0);
> this.dataGridView1.Margin = new System.Windows.Forms.Padding(0);
> this.dataGridView1.Name = "dataGridView1";
> this.dataGridView1.RowHeadersVisible = false;
> this.dataGridView1.RowTemplate.Height = 21;
> this.dataGridView1.Size = new System.Drawing.Size(550, 573);
> this.dataGridView1.TabIndex = 0;
引用返信 編集キー/
■78295 / inTopicNo.3)  Re[1]: DataGridViewで予期せぬ所で改行してしまう
□投稿者/ 石原はるか (2回)-(2016/01/06(Wed) 08:07:36)
> dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
上記は仕様でしょうか? 間違いでしょうか?


※ 上記の投稿(No.78294)失礼しました。(漢字変換の時 Enter キーを押し間違ったようです。)


引用返信 編集キー/
■78296 / inTopicNo.4)  Re[2]: DataGridViewで予期せぬ所で改行してしまう
□投稿者/ 綾瀬さとみ (7回)-(2016/01/06(Wed) 18:50:19)
石原はるかさんご返信ありがとうございます。

仕様・間違いといいますか
改行したくてEnvironment.NewLineを入れているのに
WrapMode=falseまたはWrapMode=NotSetだと
改行されないのでtrueにしています。

引用返信 編集キー/
■78301 / inTopicNo.5)  Re[3]: DataGridViewで予期せぬ所で改行してしまう
□投稿者/ 石原はるか (3回)-(2016/01/06(Wed) 22:04:03)
No78296 (綾瀬さとみ さん) に返信
失礼しました、私が勘違いしていたようです。

下記のコードを追加して試して見て下さい。(VBのコードで試したので C# に置き換えて下さい)
列幅を設定してから行の高さを設定して下さい。(現状ではそのようになっているようですが。)

	Private Sub DataGridView1_EditingControlShowing(sender As Object, e As _
					DataGridViewEditingControlShowingEventArgs) _
					Handles DataGridView1.EditingControlShowing
	  If TypeOf e.Control Is DataGridViewTextBoxEditingControl Then
			Dim txtbox As DataGridViewTextBoxEditingControl =
					CType(e.Control, DataGridViewTextBoxEditingControl)
		txtbox.WordWrap = False
	  End If
	End Sub

引用返信 編集キー/
■78319 / inTopicNo.6)  Re[4]: DataGridViewで予期せぬ所で改行してしまう
□投稿者/ 綾瀬さとみ (12回)-(2016/01/07(Thu) 17:29:11)
石原はるかさんへ
下記のようにしてみましたが
症状は改善されませんでした。

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (e.Control is DataGridViewTextBoxEditingControl)
{
DataGridViewTextBoxEditingControl txtbox = (DataGridViewTextBoxEditingControl)e.Control;
txtbox.WordWrap = false;
}
}
引用返信 編集キー/
■78321 / inTopicNo.7)  Re[5]: DataGridViewで予期せぬ所で改行してしまう
□投稿者/ 石原はるか (4回)-(2016/01/07(Thu) 18:00:16)
No78319 (綾瀬さとみ さん) に返信
> 症状は改善されませんでした。

念の為、下記をどこか別のところで(表示後に)実施しても同じでしょうか?
this.dataGridView1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells;
this.dataGridView1.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells;

それでも同じようなら表示前にあらかじめ幅広の列に設定してからデータを表示後に自動列幅設定をするとかしかないのでは。
私が試した限りでは、うまく改行コード通りに改行されたので

引用返信 編集キー/
■78324 / inTopicNo.8)  Re[6]: DataGridViewで予期せぬ所で改行してしまう
□投稿者/ 綾瀬さとみ (13回)-(2016/01/07(Thu) 18:51:57)
石原はるかさん、ご返信ありがとうございます。

this.dataGridView1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells;
this.dataGridView1.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells;

に関しては最初から設定してあります。
また、ためしに値を入れた行を挿入した後に

this.dataGridView1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells;
this.dataGridView1.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells;

この処理を入れてみましたが、結果は変わらずです。

列幅を大きくしようとwidthを設定しようと思ったのですが
デフォルトが5なのですが、大きい値を色々と入れてみましたが
入れても、入れても5に戻ってしまいます。

ちなみにcolumnとrowのヘッダーを非表示にしているのが関係あるのでしょうか。
引用返信 編集キー/
■78326 / inTopicNo.9)  Re[7]: DataGridViewで予期せぬ所で改行してしまう
□投稿者/ 石原はるか (5回)-(2016/01/07(Thu) 19:17:15)
No78324 (綾瀬さとみ さん) に返信
なんとなく原因が解りました。
列・行を自動設定のままにしておくと、セルにアクセスした時点で折り返して表示した
状態での行の自動設定が行われてその後列幅を広げない限り元に戻りません。

下記を試してみて下さい。

Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
DataGridView1.ColumnCount = 4
DataGridView1.RowCount = 5

DataGridView1.Columns(1).DefaultCellStyle.WrapMode = DataGridViewTriState.True
DataGridView1.Item(1, 1).Value = "あいうえお" + Environment.NewLine + "かきくけこ"
DataGridView1.Item(1, 2).Value = "あいうえおかきくけこさしすせそたちつてとなにぬねの" + Environment.NewLine + "アイウエオ"
DataGridView1.Item(1, 3).Value = "あいうえお" + Environment.NewLine + "かきくけこ"
DataGridView1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells
DataGridView1.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells
DataGridView1.Refresh()
'一旦 AutoSize で表示後、列か行のどちらかを元に戻しておかないと
'セル等にアクセスした時に折り返して表示した行の高さに設定されてしまうので
DataGridView1.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.None
End Sub
End Class

引用返信 編集キー/
■78328 / inTopicNo.10)  Re[8]: DataGridViewで予期せぬ所で改行してしまう
□投稿者/ 綾瀬さとみ (14回)-(2016/01/07(Thu) 21:35:57)
石原はるかさん、ご返信ありがとうございます。

やってみたところ、列幅はしっかり折り返されなくなりました。
しかし、2行の行が1行分しか表示されず、
2行目が隠れてしまいます。
引用返信 編集キー/
■78329 / inTopicNo.11)  Re[9]: DataGridViewで予期せぬ所で改行してしまう
□投稿者/ 石原はるか (6回)-(2016/01/08(Fri) 06:08:18)
No78328 (綾瀬さとみ さん) に返信
> やってみたところ、列幅はしっかり折り返されなくなりました。
> しかし、2行の行が1行分しか表示されず、
> 2行目が隠れてしまいます。

多分、表示件数が多いために列幅を設定してすぐに行の高さを設定
すると行の高さが自動設定されない内に高さの固定設定有効になるからだと。

だったら、最初に列幅だけ自動設定して、完全に設定されてから
列幅を固定にして行の高さだけ自動設定するように時間差を設けて
実行するようにすればできるかと思います。

引用返信 編集キー/
■78330 / inTopicNo.12)  Re[10]: DataGridViewで予期せぬ所で改行してしまう
□投稿者/ 綾瀬さとみ (15回)-(2016/01/08(Fri) 08:22:35)
石原はるかさん、ご返信ありがとうございます。
まずは初期設定で
dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None;
として、次に
//処理
dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None;
//時間を置いて
dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;

としましたら、全てのセルが左上に最初で表示されてしまいました。

引用返信 編集キー/
■78333 / inTopicNo.13)  Re[11]: DataGridViewで予期せぬ所で改行してしまう
□投稿者/ 石原はるか (7回)-(2016/01/08(Fri) 11:46:46)
No78330 (綾瀬さとみ さん) に返信
> としましたら、全てのセルが左上に最初で表示されてしまいました。

ダメでしたか?

私の環境では、DataGridView1.Refresh() でも OK だったのですが、下記のように Update() メソッドに変更して
試して見て下さい。それでもだめならチョットお手上げです。

DataGridView1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells
DataGridView1.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells
DataGridView1.Update()
DataGridView1.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.None

引用返信 編集キー/
■78335 / inTopicNo.14)  Re[12]: DataGridViewで予期せぬ所で改行してしまう
□投稿者/ 綾瀬さとみ (16回)-(2016/01/08(Fri) 12:23:24)
石原はるかさん。
ご返信誠にありがとうございます。
前に教えていただいたRefresh()を忘れてしまいました。

色々試しましたが

初期設定で
dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None;

とし、処理の後

dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
dataGridView1.Refresh();
dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None;

こうすることによってうまくいきました。
ありがとうございます。

ただ、1行の時、高さが狭すぎて
特に「g」などは下の丸が半分隠れてしまいます。
引用返信 編集キー/
■78337 / inTopicNo.15)  Re[13]: DataGridViewで予期せぬ所で改行してしまう
□投稿者/ 石原はるか (8回)-(2016/01/08(Fri) 14:15:48)
No78335 (綾瀬さとみ さん) に返信

> ただ、1行の時、高さが狭すぎて
> 特に「g」などは下の丸が半分隠れてしまいます。

上揃え 中央揃え 下揃え 等を試して見てもですか?

引用返信 編集キー/
■78340 / inTopicNo.16)  Re[14]: DataGridViewで予期せぬ所で改行してしまう
□投稿者/ 綾瀬さとみ (17回)-(2016/01/08(Fri) 19:05:36)
石原はるかさんへ
ご返信いただき大変ありがとうございます。

「g」に関しては別件で、私の勘違いでした。
すいません。

やっと、完成しました。
本当にありがとうございます。
引用返信 編集キー/
■78341 / inTopicNo.17)  Re[15]: DataGridViewで予期せぬ所で改行してしまう
□投稿者/ 綾瀬さとみ (20回)-(2016/01/08(Fri) 19:06:52)
解決済みし忘れました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -