这就是我所拥有的:
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 :(得分: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的底部。
就像我说的那样,它运作良好,但我必须相信这是一种更优雅的方式。