关于“Silverlight”下“DataGrid控件”的疑问。    问题一:             “Silverlight”下“DataGrid控件”不可以后台添加行吗???                 可以后台添加列:dg_Report.Columns.Add()             
             没有后台添加行的“Rows”集合的操作,也没有“Items”,怎么后台添加???
    问题二:就像“Asp.net”中的“GridView”一样合并“列和行”,可以吗???   有实例可以参考吗???         问题三:“Silverlight Toolkit”下有没有类似“Asp.net”下“Table”的控件???

解决方案 »

  1.   

    问题一:
          DataGrid确实不能手动添加行,在DataGrid中一行是一个DataGridRow对象,DataGridRow会根据显示的行数来生成和复用,换句话说就是页面上显示几行就有几个DataGridRow,而不是由DataGrid数据的条数决定的
    问题二:
          ASP.Net中GridView本质上是html的table,table可以合并单元格;DataGrid是由DataGridRow和DataGridCell组成,目前还没有发现如何实现单元格合并
    问题三:
         ASP.Net本质上是些html,Silverlight与其去区别很大,本质上更像winform 
      

  2.   

    DataGrid是数据绑定控件,她绑定一个实现了 observablecollection<T> 接口的集合的话,那么它就跟数据模型“共同进退”,你在DataGrid上增加一行则数据集合也增加一行,你在数据集合上增加一行则DataGrid也增加一行。Silverlgiht最基本、最常用、最强大的布局控件就是Grid。这跟asp.net中使用Table作为最基本、最强大的布局控件,是一个道理。
      

  3.   

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

  4.   


    对吭,Grid就像“asp.net”中的Table...
      

  5.   

    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”这些属性,来设置行,单元格等???
      

  6.   

    谢谢大家,谢谢。//标题
      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);