Silverlight DataGrid自适应数据
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自适应数据的更多相关文章
- Silverlight实例教程 – Datagrid,Dataform数据验证和ValidationSummary(转载)
Silverlight 4 Validation验证实例系列 Silverlight实例教程 - Validation数据验证开篇 Silverlight实例教程 - Validation数据验证基础 ...
- silverlight DataGrid 显示篇
silverlight DataGrid 显示篇 分类: Silverlight2012-05-12 21:55 693人阅读 评论(0) 收藏 举报 datagridsilverlightbindi ...
- [转载]再次谈谈easyui datagrid 的数据加载
这篇文章只谈jQuery easyui datagrid 的数据加载,因为这也是大家谈论最多的内容.其实easyui datagrid加载数据只有两种方式:一种是ajax加载目标url返回的json数 ...
- 在js中获取easyui datagrid的数据
可以在页面对datagrid的数据直接进行修改,然后提交到数据库,但是要求在提交前获取datagrid的所有行的数据.API提供了getData方法,但是怎么用了,没说. 最后这样写才搞定 var a ...
- 使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置)
原文:使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置) 在上一篇中说到了Silverlight下的Socket通信,在最后的时候说到本篇将会结合地图. ...
- 关于datagrid中数据条件颜色问题
前天公司考核中做了一个小的考核项目,在考核中一直没找到怎么设置datagrid中数据颜色的代码 他的题目是这样的: 项目资金小于50000时,项目资金数字需要红色文字显示,否则以绿色文字显示 后来找到 ...
- Easyui 实现点击不同树节点打开不同tab页展示不同datagrid表数据设计
实现点击不同树节点打开不同tab页展示不同datagrid表数据设计 by:授客 QQ:1033553122 测试环境 jquery-easyui-1.5.3 需求描述 如上图, 1.点击左侧树,叶子 ...
- dojo Datagrid 实现数据删除功能
DataGrid实现数据动态刷新功能见前一个帖子:http://www.cnblogs.com/qq552048250/p/4447103.html 实现数据删除只需要向表格中动态添加按钮,并为按钮的 ...
- 谈谈easyui datagrid 的数据加载(转)
这篇文章只谈jQuery easyui datagrid 的数据加载,因为这也是大家谈论最多的内容.其实easyui datagrid加载数据只有两种方式:一种是ajax加载目标url返回的json数 ...
随机推荐
- php自带加密解密函数
php自带加密解密函数 一.总结 一句话总结:可逆和不可逆函数. 二.php自带加密解密函数 1.不可逆的加密函数为:md5().crypt() md5() 用来计算 MD5 哈稀.语法为:strin ...
- 使用apidoc 生成Restful web Api文档
在项目开发过程中,总会牵扯到接口文档的设计与编写,之前使用的都是office工具,写一个文档,总也是不够漂亮和直观.好在git上的开源大神提供了生成文档的工具,so来介绍一下! 该工具是Nodejs的 ...
- TimeUnit用法
TimeUnit是java.util.concurrent包下面的一个类,表示给定单元粒度的时间段 1.主要作用 时间颗粒度转换 延时 2.常用的颗粒度 TimeUnit.DAYS //天 TimeU ...
- [Typescript 2] Nullable Types - Avoiding null and undefined Bugs
For example you have a TS app: enum PaylerPosition { Guard, Forward, Center } interface Player { nam ...
- Spring异步方法注解 @Async
@Async 0. 介绍 在Spring 3.x之后,通过内置@Async标明异步方法,可以简化异步开发流程. @Async既可提供无返回值的调用,也可提供有返回值的调用,下文将分别介绍两种使用方式. ...
- C# opcode 查询源码
Add|将两个值相加并将结果推送到计算堆栈上.Add.Ovf|将两个整数相加,执行溢出检查,并且将结果推送到计算堆栈上.Add.Ovf.Un|将两个无符号整数值相加,执行溢出检查,并且将结果推送到计算 ...
- Arcgis api for javascript学习笔记(4.5版本)-三维地图实现弹窗功能
1. 对于Graphic对象,在初始化Graphic对象时设置popupTemplate属性,即可实现点击Graphic时显示弹窗. <!DOCTYPE html> <html> ...
- 【JDBC】java PreparedStatement操作oracle数据库
************************************************************************ ****原文:blog.csdn.net/clark_ ...
- 一句话的设计模式(JAVA版)
·结构型模式: o适配器:用来把一个接口转化成另一个接口,如 java.util.Arrays#asList(). o桥接模式:这个模式将抽象和抽象操作的实现进行了解耦,这样使得抽象和实现可以独立地变 ...
- 《冰球撞击》Android休闲桌球类游戏现已面试,快来下载吧!
<冰球撞击>Android休闲桌球类游戏现已完工上市快来下载吧! http://pan.baidu.com/s/1dD9vIRv <冰球撞击>是一个类似玩投篮机操作方式的And ...