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数 ...
随机推荐
- DOM 的classList 属性
1.添加1个或多个class add(class1, class2, ...) 2.移除class remove(class1, class2, ...) 3.判断指定的类名是否存在 contains ...
- Android 自定义View——自定义点击事件
每个人手机上都有通讯录,这是毫无疑问的,我们通讯录上有一个控件,在通讯录的最左边有一列从”#”到”Z”的字母,我们通过滑动或点击指定的字母来确定联系人的位置,进而找到联系人.我们这一节就通过开发这个控 ...
- 通过binlog日志统计dml语句,找出操作频繁的表
mysqlbinlog --no-defaults --base64-output=decode-rows -v -v mysql-bin.000002 |awk '/###/{if($0~/UPDA ...
- Oracle中的sid与servicename
在平时自己创建库的时候,习惯的将sid与servicename取同名,但是在实际生产中这两个名字很有可能不一致,再使用jdbc连接数据库的url时就需要注意区分了,否则创建不了数据库连接 //serv ...
- Spring学习笔记之六(数据源的配置)
1.前言 上一篇博客分析了,Spring中实现AOP的两种动态代理的机制,以下这篇博客.来解说一下Spring中的数据源的配置. 2.DAO支持的模板类 Spring提供了非常多关于Dao支持的模板 ...
- 【u109】数字生成游戏(gen)
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 小明完成了这样一个数字生成游戏,对于一个不包含0的数字s来说,有以下3种生成新的数的规则: 1. 将s ...
- Erlang类型及函数声明规格
http://erlangdisplay.iteye.com/blog/404570 Erlang类型及函数声明规格 Author: Mail: Date: Copyright: litaocheng ...
- 【26.09%】【codeforces 579C】A Problem about Polyline
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- Codeforces C. Pattern 412 解决问题的方法
这个问题是比较暴力的法律主体. 主要是检查每一个是否没有使用足够的?.假设优先使用其他的无论是什么字母,假设你一定不能使用?. 找一个有能力并给予所有的字符串匹配字符串,而且采用的最小?号码. 原标题 ...
- 从vue1迁移到vue2踩到的两个坑
先说第一个,在vue1中用v-for的时候,习惯性用$index和$key来取键.今天迁移到vue2之前,也知道vue2里不能这样用了,结果还是出问题了, 数据渲染不出来. <li v-for= ...