我要实现在gridview始终显示10行,即使有效数据不足10行,空的行用√填充
网上看到一个方法:假设这样一种模型,显示用GridView,数据源用DataSet。每次获取10条信息,按每页10条分页。
有的时候数据可能不足10条,而客户要求不足10条显示为空行,以下代码解决了这个问题。
C# codeprivate DataTable FillBlank(int pageSize, DataTable dt)
{
if (dt.Rows.Count < pageSize)
{
for (int i = dt.Rows.Count - 1; i < pageSize; i++)
{
DataRow dr = dt.NewRow();
dt.Rows.Add(dr);
}
}
return dt;
}
private void BindGrid(DataTable dt)
{
GridView.DataSource = dt;
GridView.DataBind();
}
——————————————————————————
我要显示数据的代码:
。。。。。
try
{
SqlDataAdapter comm = new SqlDataAdapter("select 节次,max(case when 星期='星期一' then 年级+班级+'('+预约人+')' else '√' end) as 星期一,max(case when 星期='星期二' then 年级+班级+'('+预约人+')' else '√' end) as 星期二,max(case when 星期='星期三' then 年级+班级+'('+预约人+')' else '√' end) as 星期三,max(case when 星期='星期四' then 年级+班级+'('+预约人+')' else '√' end) as 星期四,max(case when 星期='星期五' then 年级+班级+'('+预约人+')' else '√' end) as 星期五,max(case when 星期='星期六' then 年级+班级+'('+预约人+')' else '√' end) as 星期六,max(case when 星期='星期日' then 年级+班级+'('+预约人+')' else '√' end) as 星期日 from manage_keji_yuyue where 资源=@resource and 周次=@zhouci and 年度=@niandu group by 节次", conn);
comm.SelectCommand.Parameters.AddWithValue("@zhouci", DropDownList2.SelectedValue);
comm.SelectCommand.Parameters.AddWithValue("@niandu", (string)Session["Niandu"]);
comm.SelectCommand.Parameters.AddWithValue("@resource", (string)ViewState["tag"]);
conn.Open();
DataSet ds = new DataSet();
comm.Fill(ds);
conn.Close();
GridView1.DataSource = ds;
GridView1.DataBind();
GridView1.Caption = "第" + DropDownList2.SelectedValue + "周〖" + (string)ViewState["tag"] + "〗使用预约表";
}
catch { }
。。。。
怎么用呢? --------------------编程问答-------------------- 没接触过 --------------------编程问答--------------------
--------------------编程问答-------------------- 谢谢楼上,测试了,我的问题比上面要复杂一些,
protected void Page_Load(object sender, EventArgs e)
{
try
{
SqlDataAdapter comm = new SqlDataAdapter("select 节次,max(case when 星期= '星期一 ' then 年级+班级+ '( '+预约人+ ') ' else '√ ' end) as 星期一,max(case when 星期= '星期二 ' then 年级+班级+ '( '+预约人+ ') ' else '√ ' end) as 星期二,max(case when 星期= '星期三 ' then 年级+班级+ '( '+预约人+ ') ' else '√ ' end) as 星期三,max(case when 星期= '星期四 ' then 年级+班级+ '( '+预约人+ ') ' else '√ ' end) as 星期四,max(case when 星期= '星期五 ' then 年级+班级+ '( '+预约人+ ') ' else '√ ' end) as 星期五,max(case when 星期= '星期六 ' then 年级+班级+ '( '+预约人+ ') ' else '√ ' end) as 星期六,max(case when 星期= '星期日 ' then 年级+班级+ '( '+预约人+ ') ' else '√ ' end) as 星期日 from manage_keji_yuyue where 资源=@resource and 周次=@zhouci and 年度=@niandu group by 节次 ", conn);
comm.SelectCommand.Parameters.AddWithValue("@zhouci ", DropDownList2.SelectedValue);
comm.SelectCommand.Parameters.AddWithValue("@niandu ", (string)Session["Niandu "]);
comm.SelectCommand.Parameters.AddWithValue("@resource ", (string)ViewState["tag "]);
conn.Open();
DataSet ds = new DataSet();
comm.Fill(ds);
conn.Close();
GridView1.DataSource = FillBlank(9, ds.Tables[0]);
GridView1.DataBind();
GridView1.Caption = "第 " + DropDownList2.SelectedValue + "周〖 " + (string)ViewState["tag "] + "〗使用预约表 ";
}
catch { }
}
private DataTable FillBlank(int pageSize,DataTable dt)
{
if(dt.Rows.Count<pageSize)
{
for(int i=dt.Rows.Count-1;i<pageSize;i++)
{
string[] results = new string[dt.Columns.Count];
for(int j=0;j<results.Length;j++)
{
results[j] = "√";
}
dt.Rows.Add(results);
}
}
return dt;
}
以上代码确实能实现:后面的空行显示√,如下图:
节次 星期一 星期二 星期三 星期四 星期五 星期六 星期日
3 2008级1班(超级用户) √ √ √ √ √ √
√ √ √ √ √ √ √ √
√ √ √ √ √ √ √ √
√ √ √ √ √ √ √ √
√ √ √ √ √ √ √ √
√ √ √ √ √ √ √ √
√ √ √ √ √ √ √ √
√ √ √ √ √ √ √ √
√ √ √ √ √ √ √ √
√ √ √ √ √ √ √ √
我现在的要求是始终有这样的效果:
节次 星期一 星期二 星期三 星期四 星期五 星期六 星期日
√ √ √ √ √ √ √ √
√ √ √ √ √ √ √ √
3 2008级1班(超级用户) √ √ √ √ √ √
√ √ √ √ √ √ √ √
√ √ √ √ √ √ √ √
√ √ √ √ √ √ √ √
√ √ √ √ √ √ √ √
√ √ √ √ √ √ √ √
√ √ √ √ √ √ √ √
√ √ √ √ √ √ √ √
也就是说第1、2节没有也要填仓√ ,怎么办?
--------------------编程问答--------------------
--------------------编程问答-------------------- 谢谢楼上,测试了,第2个代码和第一个代码效果完全一样! --------------------编程问答-------------------- 下面是我的完整测试代码,符合你的需求;如果是数据源的问题我就没办法了
private DataTable FillBlank(int pageSize,DataTable dt)
{
for(int k=0;k<dt.Rows.Count;k++)
{
for (int m = 0; m < dt.Columns.Count; m++)
{
if (dt.Rows[k][m].ToString().Trim() == "")
{
dt.Rows[k][m] = "√";
}
}
}
if(dt.Rows.Count<pageSize)
{
for(int i=dt.Rows.Count-1;i<pageSize;i++)
{
string[] results = new string[dt.Columns.Count];
for(int j=0;j<results.Length;j++)
{
results[j] = "√";
}
dt.Rows.Add(results);
}
}
return dt;
}
--------------------编程问答-------------------- 我知道了,是数据源的问题了,谢谢! --------------------编程问答-------------------- 学习了 --------------------编程问答-------------------- 怎么全是0分呢,我的天! --------------------编程问答-------------------- 关注一下。。。。。 --------------------编程问答-------------------- 提问者yezby20071115
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
this.GridView1.DataSource = FillBlank(9, GetTable()).DefaultView;
this.GridView1.DataBind();
}
}
private DataTable GetTable()
{
DataTable dt = new DataTable();
dt.Columns.Add("fff");
dt.Columns.Add("ggg");
DataRow dr = dt.NewRow();
dr["fff"] = "";
dr["ggg"] = "fdsf";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["fff"] = "ff";
dr["ggg"] = "";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["fff"] = "";
dr["ggg"] = "";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["fff"] = "ff";
dr["ggg"] = "";
dt.Rows.Add(dr);
return dt;
}
private DataTable FillBlank(int pageSize,DataTable dt)
{
for(int k=0;k<dt.Rows.Count;k++)
{
for (int m = 0; m < dt.Columns.Count; m++)
{
if (dt.Rows[k][m].ToString().Trim() == "")
{
dt.Rows[k][m] = "√";
}
}
}
if(dt.Rows.Count<pageSize)
{
for(int i=dt.Rows.Count-1;i<pageSize;i++)
{
string[] results = new string[dt.Columns.Count];
for(int j=0;j<results.Length;j++)
{
results[j] = "√";
}
dt.Rows.Add(results);
}
}
return dt;
}
结帖者yezby20071118
不0分才怪呢 ........... --------------------编程问答-------------------- 怎么全是0分呢,我的天!
-------------------
提问者yezby20071115
结帖者yezby20071118
不0分才怪呢 ...........
-------------------
肚子笑痛了~~~ --------------------编程问答-------------------- 提问者yezby20071115
结帖者yezby20071118
不0分才怪呢 ...........
-------------------
肚子笑痛了~~~ --------------------编程问答-------------------- td --------------------编程问答-------------------- ………… --------------------编程问答-------------------- LZ你可以这样,比如datatable总的数据是num=46条,你计算出少4条数据。
再在datatable假如4条数据。
for循环假如4叫你想要的数据
这样不就是可以了吗 --------------------编程问答-------------------- 假如改成加入(输入法问题,"假如"总是在第一个)
补充:.NET技术 , ASP.NET