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. python3 numpy API练习代码

    # -*- coding: utf-8 -*- import numpy as np; a=np.array([1,2,3,4,5,6]); print("数组是:",a) #数组 ...

  2. iOS app审核参考信息地址

    发件人:(苹果开发支持邮箱地址) 中国区电话:400-670-1855 chinadev<chinadev@asia.apple.com>   您好: 感谢您与 Apple 开发者计划支持 ...

  3. WPF动画结束后的行为方式

    原文:WPF动画结束后的行为方式 在WPF中可以使用Animation来完成动画功能,如移动,旋转等,最近写的一个程序需要实现控件的移动,包括自动移动和手动控制.原理很简单,就是改变控件的Margin ...

  4. Linux下新手怎样将VIM配置成C++编程环境(能够STL自己主动补全)

    ~ 弄拉老半天,最终弄的几乎相同啦,果然程序猿还是须要有点折腾精神啊. 首先你要安装vim,命令:sudo apt-get install vim vim它仅仅是一个编辑器,它不是IDE(比方code ...

  5. Linux下用GCC

    Linux下用GCC 前言 离职前对做过的支付系统进行了一番#总结,继续完善我的C服务器. 本想着接下来大概实现一下 CGI 协议,但是实现过程中被一个问题卡住了: C进程与php进程的交互数据类型问 ...

  6. 云主机CentOS 7新环境命令行搭建node工程步骤

    1.用Node官网提供的命令安装node https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-d ...

  7. 静态资源命名的注意点以及document.write与innerHTML的区别

    今天拿出了去年刚开始学前端的那本书来看,发现好多新东西. 使用下划线和混合大小写不利于SEO! document.write与innerHTML的区别 这个问题大概是初学前端的人才会问的吧,业务代码中 ...

  8. Android 升级下载 它们的定义Updates 兼容版本

    Android 更新模块 它们的定义Update 写这个总结是由于在项目中碰到了Android系统兼容的BUG   Android项目原本使用的是API提供的下载方法   例如以下: Download ...

  9. dot net core 使用 usb

    原文:dot net core 使用 usb 本文告诉大家如何在 dot net core 使用 usb 目录 获得通知 读写 串口通信 LGPL 首先需要打开 Nuget 安装 CoreCompat ...

  10. 经典书单 —— 语言/算法/机器学习/深度学习/AI/CV/PGM

    0.0 计算机科学 <Lex 与 Yacc> Think Complexity(使用 Python 语言) GitHub - AllenDowney/ThinkComplexity: Co ...