关于“Silverlight”下“DataGrid控件”的疑问

starrycheng 2012-06-03 11:36:46
关于“Silverlight”下“DataGrid控件”的疑问。

问题一:

“Silverlight”下“DataGrid控件”不可以后台添加行吗???

可以后台添加列:dg_Report.Columns.Add()


没有后台添加行的“Rows”集合的操作,也没有“Items”,怎么后台添加???


问题二:就像“Asp.net”中的“GridView”一样合并“列和行”,可以吗??? 有实例可以参考吗???



问题三:“Silverlight Toolkit”下有没有类似“Asp.net”下“Table”的控件???
...全文
177 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
starrycheng 2012-06-05
  • 打赏
  • 举报
回复
谢谢大家,谢谢。

//标题
var tr = new RowDefinition();
//var tr = new TableRow { HorizontalAlign = HorizontalAlign.Center };
var col = new ColumnDefinition();

var td = new TextBlock
{
Text = string.Format("{0}<br/>(单位:{1})", ChartTitle, EnergyUnit),
BackColor = Color.FromName(export ? "#CCFFFF" : "#E7EFF7"),
Height = Unit.Pixel(30),
ColumnSpan = XValue.Length + 1
};
问题一:Silverlight下的“Grid”的“RowDefinition()”相当于“asp.net”下“Table”控件的“TableRow”,对吧???

Silverlight下的“Grid”控件有“ColumnDefinition”属性,但是没有“Cell”属性。“ColumnDefinition”它相当于“TableCell”吗???

问题二:如果在Grid下增加一行,然后在该行上增加一个单元格,单元格“跨五列”应该怎么实现???


tr.Cells.Add(td);
tblResult.Rows.Add(tr);
starrycheng 2012-06-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

一般布局都用Grid。当然要视情况而定。StackPanel,Canvas,DockPanel等分别适用于不同的情况。
[/Quote]

对吭,Grid就像“asp.net”中的Table...
starrycheng 2012-06-04
  • 打赏
  • 举报
回复
asp.net中像这样用“Table”,制作报表:

protected void OnRenderTable(bool export)
{
//取得缓存数据
var datas = GetData();
var XValue = (from KeyValuePair<KeyValuePair<string, string>, double[]> item in datas select item.Key.Value).ToArray();

//初始化表格
tblResult.Rows.Clear();

//标题
var tr = new TableRow { HorizontalAlign = HorizontalAlign.Center };
var td = new TableCell
{
Text = string.Format("{0}<br/>(单位:{1})", ChartTitle, EnergyUnit),
BackColor = Color.FromName(export ? "#CCFFFF" : "#E7EFF7"),
Height = Unit.Pixel(30),
ColumnSpan = (XValue.Length + 2)
};
tr.Cells.Add(td);
tblResult.Rows.Add(tr);

//标头
tr = new TableRow { HorizontalAlign = HorizontalAlign.Center };
td = new TableCell { Text = "年份", Width = Unit.Pixel(80) };
tr.Cells.Add(td);
td = new TableCell { Text = "项目", Width = Unit.Pixel(100) };
tr.Cells.Add(td);
foreach (var data in datas)
{
td = new TableCell { Text = data.Key.Value, Wrap = false };
tr.Cells.Add(td);
}
tblResult.Rows.Add(tr);

//内容
var years = GetSelectedYears();
for (var X = 0; X < years.Count; X++)
{
//年耗量合计
tr = new TableRow { HorizontalAlign = HorizontalAlign.Center };
td = new TableCell
{
RowSpan = rdoStatisticsType.SelectedIndex != 2 ? 3 : 2,
Text = string.Format("{0}年", years[X]),
};
tr.Cells.Add(td);
td = new TableCell { Text = "年耗量合计" };
tr.Cells.Add(td);
for (var I = 0; I < XValue.Length; I++)
{
td = new TableCell { Text = datas[I].Value[X].ToString() };
tr.Cells.Add(td);
}
tblResult.Rows.Add(tr);

//单位面积能耗
tr = new TableRow { HorizontalAlign = HorizontalAlign.Center };
td = new TableCell { Text = "单位面积能耗" };
tr.Cells.Add(td);
for (var I = 0; I < XValue.Length; I++)
{
//面积
double area;
if(rdoStatisticsType.SelectedIndex == 0)
{
area = AreaHeadCount.Where(item => item.Key.StartsWith("R#")).Select(item => item.Value[0]).Sum();
}
else
{
var index = I;
var info = AreaHeadCount.Where(item => item.Key == (rdoStatisticsType.SelectedIndex != 2 ? "R#" : "F#") + datas[index].Key.Key).FirstOrDefault();
area = (info.Value == null || info.Value[0] == 0) ? 0 : info.Value[0];
}

td = new TableCell { Text = (area == 0 ? 0 : datas[I].Value[X] / area).ToString("#0.00") };
tr.Cells.Add(td);
}
tblResult.Rows.Add(tr);

//
if (rdoStatisticsType.SelectedIndex == 2) continue;

//
tr = new TableRow {HorizontalAlign = HorizontalAlign.Center};
td = new TableCell {Text = "平均消耗"};
tr.Cells.Add(td);
for (var I = 0; I < XValue.Length; I++)
{
//人数
double count;
if (rdoStatisticsType.SelectedIndex == 0)
{
count = AreaHeadCount.Where(item => item.Key.StartsWith("R#")).Select(item => item.Value[1]).Sum();
}
else
{
var index = I;
var info = AreaHeadCount.Where(item => item.Key == (rdoStatisticsType.SelectedIndex != 2 ? "R#" : "F#") + datas[index].Key.Key).FirstOrDefault();
count = (info.Value == null || info.Value[1] == 0) ? 0 : info.Value[1];
}

td = new TableCell { Text = (count == 0 ? 0 : datas[I].Value[X] / count).ToString("#0.00") };
tr.Cells.Add(td);
}
tblResult.Rows.Add(tr);
}

//边框
foreach (TableRow row in tblResult.Rows)
{
foreach (TableCell cell in row.Cells)
{
cell.Style.Add("border", string.Format("1px {0} #000000", export ? "thin" : "solid"));
}
}
}

Silverlight的“Grid”控件,可以做吗??? 它有没有“Row”、“Cell”这些属性,来设置行,单元格等???


mizuho_2006 2012-06-03
  • 打赏
  • 举报
回复
一般布局都用Grid。当然要视情况而定。StackPanel,Canvas,DockPanel等分别适用于不同的情况。
  • 打赏
  • 举报
回复
DataGrid是数据绑定控件,她绑定一个实现了 observablecollection<T> 接口的集合的话,那么它就跟数据模型“共同进退”,你在DataGrid上增加一行则数据集合也增加一行,你在数据集合上增加一行则DataGrid也增加一行。

Silverlgiht最基本、最常用、最强大的布局控件就是Grid。这跟asp.net中使用Table作为最基本、最强大的布局控件,是一个道理。
icewater506 2012-06-03
  • 打赏
  • 举报
回复
问题一:
DataGrid确实不能手动添加行,在DataGrid中一行是一个DataGridRow对象,DataGridRow会根据显示的行数来生成和复用,换句话说就是页面上显示几行就有几个DataGridRow,而不是由DataGrid数据的条数决定的
问题二:
ASP.Net中GridView本质上是html的table,table可以合并单元格;DataGrid是由DataGridRow和DataGridCell组成,目前还没有发现如何实现单元格合并
问题三:
ASP.Net本质上是些html,Silverlight与其去区别很大,本质上更像winform
will_never 2012-06-03
  • 打赏
  • 举报
回复
刚刚好有类似问题,同问

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧