星星之火

燎原之势不可挡
随笔 - 128, 文章 - 3, 评论 - 377, 阅读 - 65万
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

2013-8-5

1 Linq解决DataTable按照某一列的值排序

在之前的总结中提到过对拼接而成的复合的DataTable按照某一列值的大小排序,那个主要的思想是在新建表结构时将要排序的那一列的值设为int型。

但是在实际的开发中,可能会需要按照某一列的值排序,而数值可能为整型或者浮点型,这个时候我们用Linq 就可以很好的解决这样的问题。

主要实现方法如下:

private DataTable GetDataTableOrder(DataTable dt)
        {
            EnumerableRowCollection<DataRow> rows = from row in dt.AsEnumerable()
                                                    orderby Convert.ToInt32(row[2]) descending
                                                    select row;
            dt = rows.CopyToDataTable();
            return dt;
        }

 

如果要排序的列的值为浮点型,可将 orderby 后代码改为如下:

Orderby Convert.ToDecimal(row[2])其中row[2]为行中的要排序的列。

2 巧用text-overflow属性

我们在进行列表绑定的时候,某些列的内容会特别的长,甚至在答道最大长度之后依然显示不下,所以就会出现换行什么的,影响整个界面的美观。通常为了解决这样的问题,可能都是在进行数据绑定时,调用后台的一个处理方法,将要展示的内容控制在一定的长度内。今天我们使用一种简便有效的方法来解决这个问题。在css样式中有一个text-overflow属性,通过合理的利用该属性可以巧妙的解决上边所诉问题。

我们可以为要展示的内容可能过长的那一列设置如下的样式即可解决该问题,样式如下:

<style type="text/css">
.flow{        
text-overflow:ellipsis ;
        white-space:nowrap ;
        overflow:hidden ;
        }
<div class="flow" style="width:100px;background:lightblue;">
               dsfdsfdsfdsfdsfdsfdfdsf
     </div>

 

效果图:

                       

Text-overflow:有两个属性值clip和ellipsis

Clip:只是简单的裁剪,不显示….

Ellipsis:显示….

同时需要注意的是,必须为其设置固定的宽度,同时配合overflow属性共同起作用。

Overflow属性为当内容溢出时作出的处理,其属性值有以下几种:

hidden为隐藏不显示

scroll为滚动显示,显现滚动条

visible默认值,不做处理直接显示

auto如果内容被修改,则滚动显示

inherit继承父属性的overflow值

3 DataTable 导出为CSV文件

项目中有需求将检索到的数据导出为数据文件,原本做好的是导出为Excel文件,但是那样的话还需要调用office组件,所以后来商议过后就将数据转换为csv文件导出,很简单使用的一个方法跟大家分享下。

将DataTable方法转换将到到处的csv格式的字符串。

    

/// <summary>
        /// 将DataTable转换为字符串
        /// </summary>
        /// <param name="tb"></param>
        /// <returns></returns>
        public static string ExportCSVFile(DataTable tb)
        {
            StringBuilder sb = new StringBuilder();
            //遍历列名
            int i = 0;
            foreach (DataColumn column in tb.Columns)
            {
                if (i > 0) sb.Append(",");
                sb.Append("\"" + column.ColumnName + "\"");
                i++;
            }
 
            sb.Append("\n");
 
  
 
            //导出每行每列对应的数据
 
            foreach (DataRow row in tb.Rows)
            {
                int j = 0;
                foreach (DataColumn column in tb.Columns)
                {
                    if (j > 0) sb.Append(",");
                    sb.Append("\"" + row[column].ToString() + "\"");
                    j++;
               }
                sb.Append("\n");
            }
            string s = sb.ToString();
 
            //对产生的字符串进行字节编码
            Byte[] bytes = Encoding.Convert(Encoding.Default, Encoding.UTF7, Encoding.Default.GetBytes(s));
 
            return s;
        }
在当前的aspx页的按钮的Click事件中导出,具体使用如下:
        protected void ExportCSV_Click(object sender, EventArgs e)
        {
            //设置输出流的字符集/编码/内容格式等
            Response.Clear();
            Response.Charset = "UTF-8";
            Response.ContentEncoding = System.Text.Encoding.UTF8;
            Response.HeaderEncoding = System.Text.Encoding.UTF8;
            Response.ContentType = "text/csv";
            //设置输出头
            Response.AddHeader("Content-Disposition", "attachment; filename=DownloadedData.csv;");
            Response.BinaryWrite(new byte[] { 0xEF, 0xBB, 0xBF });
            string result=ExportCSVFile(DataTable);
            Response.Write(result);
            Response.Flush();
            Response.End();
        }

 

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示