设置DataGrid的动态高度

时间:2017-01-30 15:21:40

标签: c# asp.net datagrid code-behind

这就是我所拥有的:

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的高度吗?

1 个答案:

答案 0 :(得分:0)

我最终搞清楚这一点,但它并不是很优雅。如果有人知道更好的方法,请发一个答案,如果有效,我会很乐意给你一个复选标记。

我做的是在填充DataTable之后,我检查了有多少行:

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

然后,在DataBind之后,我根据静态数字(50),行的大致高度(15)以及DataTable中的记录数设置高度:

DataGrid_ClaimSearch.DataBind();

DataGrid_ClaimSearch.Columns[7].Visible = false;

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

另外,在ASPX方面,我删除了Height参数,因为它覆盖了我的代码试图设置的高度。我还必须向ASPX端添加页面标记(<p>),因为GridView下面的对象太靠近GridView的底部。

就像我说的那样,它运作良好,但我必须相信这是一种更优雅的方式。