2017-12-04 15 views
0

私はこの機能を使用これを行うには、私のDataGridViewの各列の位置を取得する必要がない場合は、値なし:GetColumnDisplayRectangle行がリサイズで

Rectangle rec = dgv.GetColumnDisplayRectangle(getColumnIndexByName(entry.Key), true); 

をしてくれ列のRECを与えるが、もし私はレコードのないテーブルを持っています。関数は0の値でrecを返します。

どうすればこの問題を解決できますか?ここ

グリッドが行を持っている場合、私が持っているものです:私は

下の列の値のフィルタとして使用するいくつかのテキストボックスを持っている青色のパネルで

enter image description here

今、グリッドがいくつかの行を持っている場合、それは完全に動作し、私は右の列の矩形を取得、私は左と幅を取得し、私はヘッダーの上にフィルタを配置することができます..私は間違ったフィルタを設定し、 0レコード、テキストボックスの配置場所はわかりません

編集:getColumnIndexByNameのコード:

protected int getColumnIndexByName(string name) 
{ 
    foreach (DataGridViewColumn col in dgv.Columns) 
    { 
     if (col.Name.ToLower().Trim() == name.ToLower().Trim()) return col.Index; 
    } 
    return -1; 
} 

おかげ

+0

@ L.Guthardt申し訳ありませんが、この問題が発生しました – ghiboz

+0

しかし、あなたはテーブルが空の場合はテーブル?なぜ? –

+0

私は行がない場合でもヘッダーはまだ存在しています...ヘッダーの上にテキストボックスを追加してフィルターとして使用し、フィルターが常に表示されるようにします – ghiboz

答えて

0

GetColumnDisplayRectangle戻っRectangle.Empty列がDisplayedではない場合。

GetColumnDisplayRectanglePrivateメソッドのソースコードを参照して、DataGridViewが指定された列の矩形を計算するのに使用することもできます。

方法は、次のコードが含まれます。

if (!this.Columns[columnIndex].Displayed) 
{ 
    return Rectangle.Empty; 
} 

回避策

あなたは回避策を探している場合は、任意のちらつきなしの長方形のリストを取得し、次のコードを使用することができます。

this.SuspendLayout(); 
var width = this.dataGridView1.Width; 
this.dataGridView1.Width = 8388607; 
var rectangles = this.dataGridView1.Columns.Cast<DataGridViewColumn>() 
    .Select(x => dataGridView1.GetColumnDisplayRectangle(x.Index, false)) 
    .ToList(); 
this.dataGridView1.Width = width; 
this.ResumeLayout();