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. 剔除list中相同的结构体数据

    剔除list中相同的结构体数据,有三个思路:1.两层循环,逐个比较 2.使用set容器来剔除 3.使用unique方法去重 // deduplication.cpp : 定义控制台应用程序的入口点. ...

  2. 如何在PHP页面中原样输出HTML代码(是该找本php的数来看了)

    如何在PHP页面中原样输出HTML代码(是该找本php的数来看了) 一.总结 一句话总结:字符串与HTML之间的相互转换主要应用htmlentities()函数来完成. 1.php中的html标签如何 ...

  3. 矩阵分解(matrix factorization)

    1. 基本概念 针对高维空间中的数据集,矩阵分解通过寻找到一组基及每一个数据点在该基向量下的表示,可对原始高维空间中的数据集进行压缩表示. 令 X=[x1,⋯,xm]∈Rm×n 为数据矩阵,矩阵分解的 ...

  4. 代码中jndi数据源的支持

    项目中基本都使用Spring框架,支持jndi还是很简单的,只需在spring配置文件中加入 <!-- 使用jndi配置数据源 --> <bean id="dataSour ...

  5. [转至云风的博客]谈谈陌陌争霸在数据库方面踩过的坑( Redis 篇)

    « 谈谈陌陌争霸在数据库方面踩过的坑(芒果篇) | 返回首页 | linode 广告时间 » 谈谈陌陌争霸在数据库方面踩过的坑( Redis 篇) 注:陌陌争霸的数据库部分我没有参与具体设计,只是参与 ...

  6. 选iphone5可以正常编译运行 , 但是5s和6和6s都会编译报错

    选iphone5可以正常编译运行   但是5s和6和6s都会编译报错 iphone6编译报错iphone5s编译报错 解决办法是,Build settings里面把Architectures里面的$( ...

  7. Qt的paint函数重写,以及QPaint给一条线绘制箭头

    直接代码: QPainter *painter; static const double Pi = 3.14159265358979323846264338327950288419717; stati ...

  8. 使用elasticsearch遇到的一些问题以及解决方法(不断更新)

    7.org.elasticsearch.transport.RemoteTransportException: Failed to deserialize exception response fro ...

  9. Android 在子线程中更新UI的几种方法

    第一种: new Handler(context.getMainLooper()).post(new Runnable() { @Override public void run() { // 在这里 ...

  10. css 单选框 样式 填充自定义背景 after

    input[type='radio'] //width 16px //height 16px display none //input[type='radio']:chcked // backgoun ...