silverlight的DataGrid如果改成fill模式 那么当数据超长也不会出现横向滚动条 如果改成按单元格模式 如果数据较短又会出现空白的地方

所以我自己写了个算法 目前实现了以list为数据源的形式 根据数据长短 标题长短 当前实际宽度进行了算法运算 并进行了调整 不多说直接上代码

public static class DataGridHelper
{
private static double withunit = 7.2;//单个英文所占像素大小
private static int hzwithunit = ;//汉字与应为对比值(1个汉字相当与多少个英文)
public static void initGrid<T>(List<T> lml,DataGrid DataGrid)
{
Dictionary<int, int> dic = new Dictionary<int, int>();
Dictionary<int, int> dic2 = new Dictionary<int, int>();
for (int j = ; j < lml.Count; j++)
{ DataGrid.SelectedIndex = j;
DataGrid.UpdateLayout();
DataGrid.ScrollIntoView(lml[j], DataGrid.Columns[]);
for (int i = ; i < DataGrid.Columns.Count; i++)
{
T mi = lml[j];
string s1 = ((TextBlock)DataGrid.Columns[i].GetCellContent(mi)).Text.ToString();
string s2 = DataGrid.Columns[i].Header.ToString();
int n1 = ;
int n2 = ;
for (int mm = ; mm < s1.Length; mm++)
{
if (((int)s1[mm]) > )
{
n1 = n1 + hzwithunit;
}
else
{
n1 = n1 + ;
}
}
for (int mm = ; mm < s2.Length; mm++)
{
if (((int)s2[mm]) > )
{
n2 = n2 + hzwithunit;
}
else
{
n2 = n2 + ;
}
}
if (!dic.Keys.Contains(i))
{ if (n1 > n2)
{
dic.Add(i, n1);
}
else
{
dic.Add(i, n2);
}
}
else
{
int s = ;
if (n1 > n2)
{
s = n1;
}
else
{
s = n2;
}
if (dic[i] < s)
{
dic[i] = s;
}
}
}
}
DataGrid.SelectedIndex = ;
DataGrid.UpdateLayout();
DataGrid.ScrollIntoView(lml.First(), DataGrid.Columns[]);
setColumnsWith(dic,dic2,DataGrid);
}
private static void setColumnsWith(Dictionary<int, int> dic, Dictionary<int, int> dic2, DataGrid DataGrid)
{
int n = ;
foreach (int i in dic.Values)
{
if (n > i)
{
n = i;
}
}
foreach (int k in dic.Keys)
{
if (dic[k] % n == )
{
if (!dic2.Keys.Contains(k))
{
dic2.Add(k, dic[k] / n);
}
}
else
{
if (!dic2.Keys.Contains(k))
{
dic2.Add(k, (dic[k] / n) + );
}
}
}
int n1 = ;
foreach (int v in dic2.Values)
{
n1 = n1 + v;
}
if (n1 * withunit < DataGrid.ActualWidth)
{
for (int i = ; i < DataGrid.Columns.Count; i++)
{
DataGrid.Columns[i].Width = new DataGridLength(dic2[i], DataGridLengthUnitType.Star);
}
}
else
{
for (int i = ; i < DataGrid.Columns.Count; i++)
{
DataGrid.Columns[i].Width = new DataGridLength(dic2[i] * withunit);
}
}
}
}

这里面当数据最大长度比列标题长度短的时候就会采用列宽 当整体宽度小于DataGrid宽度的时候就会按照权重进行分配。调用的时候直接将数据源和DataGrid对象传进去就行了。另外如果是其他类型数据源 各位也可以根据实际需求改一下 很简单的。

Silverlight DataGrid自适应数据的更多相关文章

  1. Silverlight实例教程 – Datagrid,Dataform数据验证和ValidationSummary(转载)

    Silverlight 4 Validation验证实例系列 Silverlight实例教程 - Validation数据验证开篇 Silverlight实例教程 - Validation数据验证基础 ...

  2. silverlight DataGrid 显示篇

    silverlight DataGrid 显示篇 分类: Silverlight2012-05-12 21:55 693人阅读 评论(0) 收藏 举报 datagridsilverlightbindi ...

  3. [转载]再次谈谈easyui datagrid 的数据加载

    这篇文章只谈jQuery easyui datagrid 的数据加载,因为这也是大家谈论最多的内容.其实easyui datagrid加载数据只有两种方式:一种是ajax加载目标url返回的json数 ...

  4. 在js中获取easyui datagrid的数据

    可以在页面对datagrid的数据直接进行修改,然后提交到数据库,但是要求在提交前获取datagrid的所有行的数据.API提供了getData方法,但是怎么用了,没说. 最后这样写才搞定 var a ...

  5. 使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置)

    原文:使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置) 在上一篇中说到了Silverlight下的Socket通信,在最后的时候说到本篇将会结合地图. ...

  6. 关于datagrid中数据条件颜色问题

    前天公司考核中做了一个小的考核项目,在考核中一直没找到怎么设置datagrid中数据颜色的代码 他的题目是这样的: 项目资金小于50000时,项目资金数字需要红色文字显示,否则以绿色文字显示 后来找到 ...

  7. Easyui 实现点击不同树节点打开不同tab页展示不同datagrid表数据设计

    实现点击不同树节点打开不同tab页展示不同datagrid表数据设计 by:授客 QQ:1033553122 测试环境 jquery-easyui-1.5.3 需求描述 如上图, 1.点击左侧树,叶子 ...

  8. dojo Datagrid 实现数据删除功能

    DataGrid实现数据动态刷新功能见前一个帖子:http://www.cnblogs.com/qq552048250/p/4447103.html 实现数据删除只需要向表格中动态添加按钮,并为按钮的 ...

  9. 谈谈easyui datagrid 的数据加载(转)

    这篇文章只谈jQuery easyui datagrid 的数据加载,因为这也是大家谈论最多的内容.其实easyui datagrid加载数据只有两种方式:一种是ajax加载目标url返回的json数 ...

随机推荐

  1. DOM 的classList 属性

    1.添加1个或多个class add(class1, class2, ...) 2.移除class remove(class1, class2, ...) 3.判断指定的类名是否存在 contains ...

  2. Android 自定义View——自定义点击事件

    每个人手机上都有通讯录,这是毫无疑问的,我们通讯录上有一个控件,在通讯录的最左边有一列从”#”到”Z”的字母,我们通过滑动或点击指定的字母来确定联系人的位置,进而找到联系人.我们这一节就通过开发这个控 ...

  3. 通过binlog日志统计dml语句,找出操作频繁的表

    mysqlbinlog --no-defaults --base64-output=decode-rows -v -v mysql-bin.000002 |awk '/###/{if($0~/UPDA ...

  4. Oracle中的sid与servicename

    在平时自己创建库的时候,习惯的将sid与servicename取同名,但是在实际生产中这两个名字很有可能不一致,再使用jdbc连接数据库的url时就需要注意区分了,否则创建不了数据库连接 //serv ...

  5. Spring学习笔记之六(数据源的配置)

    1.前言 上一篇博客分析了,Spring中实现AOP的两种动态代理的机制,以下这篇博客.来解说一下Spring中的数据源的配置.  2.DAO支持的模板类 Spring提供了非常多关于Dao支持的模板 ...

  6. 【u109】数字生成游戏(gen)

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 小明完成了这样一个数字生成游戏,对于一个不包含0的数字s来说,有以下3种生成新的数的规则: 1. 将s ...

  7. Erlang类型及函数声明规格

    http://erlangdisplay.iteye.com/blog/404570 Erlang类型及函数声明规格 Author: Mail: Date: Copyright: litaocheng ...

  8. 【26.09%】【codeforces 579C】A Problem about Polyline

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  9. Codeforces C. Pattern 412 解决问题的方法

    这个问题是比较暴力的法律主体. 主要是检查每一个是否没有使用足够的?.假设优先使用其他的无论是什么字母,假设你一定不能使用?. 找一个有能力并给予所有的字符串匹配字符串,而且采用的最小?号码. 原标题 ...

  10. 从vue1迁移到vue2踩到的两个坑

    先说第一个,在vue1中用v-for的时候,习惯性用$index和$key来取键.今天迁移到vue2之前,也知道vue2里不能这样用了,结果还是出问题了, 数据渲染不出来. <li v-for= ...