2017-01-30 63 views
1

的動態高度下面是我有:設置的DataGrid

OracleCommand cmd3 = new OracleCommand(); 
cmd3.CommandType = CommandType.StoredProcedure; 
cmd3.CommandText = "SP_LPI_REGISTER_CLAIM_LIST"; 
cmd3.Connection = conn; 

cmd3.Parameters.Add("vClaim_Number", OracleType.VarChar, 20).Value = txtClaimSearch.Text; 
cmd3.Parameters.Add("vClaimList", OracleType.Cursor).Direction = ParameterDirection.Output; 

//connection2.Open(); 

var SearchAdapter = new OracleDataAdapter(cmd3); 
var ds = new DataTable(); 
SearchAdapter.Fill(ds); 

ds.Columns[0].SetOrdinal(1); 
ds.Columns[1].SetOrdinal(2); 
ds.Columns[2].SetOrdinal(3); 
ds.Columns[3].SetOrdinal(4); 
ds.Columns[4].SetOrdinal(5); 
ds.Columns[5].SetOrdinal(6); 

DataGrid_ClaimSearch.DataSource = ds; 
DataGrid_ClaimSearch.DataBind(); 

DataGrid_ClaimSearch.Columns[7].Visible = false; 

// The trouble starts here 
var height = 40; 
foreach (DataGridRow dr in DataGrid_ClaimSearch.Rows) 
{ 
    height += dr.Height; 
} 

DataGrid_ClaimSearch.Height = height; 

的最後幾行是更多或更少「空中碼」。 DataGrid_ClaimsSearch沒有可用的Rows。有人可以告訴我實現我想要的結果的正確方法,那就是動態設置DataGrid的高度?

回答

0

我弄清楚了這一點,但它不是很優雅。如果有人知道更好的方法來做到這一點,請發表一個答案,我會很樂意給你一個複選標記,如果它的作品。

我所做的是我填的數據表後,我檢查,看看有多少行是:

SearchAdapter.Fill(ds); 
int DRC = ds.Rows.Count; 

然後,的DataBind後,我設置基於靜態數(50)的高度,行的大致高度(15),並記錄在數據表個數:

DataGrid_ClaimSearch.DataBind(); 

DataGrid_ClaimSearch.Columns[7].Visible = false; 

var height = 50 + (15*DRC); 
DataGrid_ClaimSearch.Height = height; 

此外,在ASPX的一面,我刪除了高度參數,因爲它是壓倒一切的高度,是我的代碼試圖設置。我還必須在ASPX端添加一個頁面標籤(<p>),因爲我的GridView下面的對象太接近GridView的底部了。

就像我說的,它工作正常,但我相信有一個更優雅的方式來做到這一點。