小编Jon*_*hem的帖子

如何使用GridView和ObjectDataSource进行排序?

我有一个GridView,ObjectDataSource我希望能够对它进行排序.

分页工作正常,但排序给了我一个例外:

GridView gridView触发了未处理的事件排序.

如何在服务器端启用排序?

(即gridView.EnableSortingAndPagingCallbacks必须保持错误)

asp.net gridview objectdatasource

15
推荐指数
2
解决办法
3万
查看次数

如何使用LINQ使C#'grep'更具功能性?

我有一个方法,使用可枚举的"搜索字符串"跨文件执行简单的'grep'.(实际上,我正在做一个非常天真的"查找所有参考文献")

IEnumerable<string> searchStrings = GetSearchStrings();
IEnumerable<string> filesToLookIn = GetFiles();
MultiMap<string, string> references = new MultiMap<string, string>();

foreach( string fileName in filesToLookIn )
{
    foreach( string line in File.ReadAllLines( fileName ) )
    {
        foreach( string searchString in searchStrings )
        {
            if( line.Contains( searchString ) )
            {
                references.AddIfNew( searchString, fileName );
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:MultiMap<TKey,TValue>大致相同Dictionary<TKey,List<TValue>>,只是避免您通常遇到的NullReferenceExceptions.


我一直试图将它变成一种更"功能"的风格,使用链式LINQ扩展方法,但还没有想到它.

一次死胡同尝试:

// I get lost on how to do a loop within a loop here...
// plus, I lose track of …
Run Code Online (Sandbox Code Playgroud)

c# linq functional-programming c#-3.0

9
推荐指数
1
解决办法
3554
查看次数

有没有比这更好的方法从PrintDocument获取页数?

这是我提出的最好的:

public static int GetPageCount( PrintDocument printDocument )
{
    printDocument.PrinterSettings.PrintFileName = Path.GetTempFileName();
    printDocument.PrinterSettings.PrintToFile = true;

    int count = 0;

    printDocument.PrintController = new StandardPrintController();
    printDocument.PrintPage += (sender, e) => count++;

    printDocument.Print();

    File.Delete( printDocument.PrinterSettings.PrintFileName );

    return count;
}
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?(这实际上很慢)

c# printing printdocument

8
推荐指数
1
解决办法
8331
查看次数

有没有更好的方法来使用LINQ聚合字典?

我试图从可枚举的构建字典,但我需要一个聚合器用于所有可能重复的键.直接使用ToDictionary()偶尔会导致重复键.

在这种情况下,我有一堆时间条目({DateTime Date,double Hours}),如果同一天有多个时间条目,我想要那天的总时间.即,一个自定义聚合器,它将为我提供一个字典条目的唯一键.

有没有比这更好的方法呢?

(这确实有效.)

    private static Dictionary<DateTime, double> CreateAggregatedDictionaryByDate( IEnumerable<TimeEntry> timeEntries )
    {
        return
            timeEntries
                .GroupBy(te => new {te.Date})
                .Select(group => new {group.Key.Date, Hours = group.Select(te => te.Hours).Sum()})
                .ToDictionary(te => te.Date, te => te.Hours);
    }
Run Code Online (Sandbox Code Playgroud)

我想我真的在寻找这样的东西:

IEnumerable<T>.ToDictionary( 
    /* key selector : T -> TKey */, 
    /* value selector : T -> TValue */, 
    /* duplicate resolver : IEnumerable<TValue> -> TValue */ );
Run Code Online (Sandbox Code Playgroud)

所以...

timeEntries.ToDictionary( 
    te => te.Date, 
    te => te.Hours, 
    duplicates => duplicates.Sum() );
Run Code Online (Sandbox Code Playgroud)

'解析器'可以是.First()或.Max()等等.

或类似的东西.


我有一个实现......当我正在研究时,另一个实现了答案.

矿: …

c# linq group-by aggregate todictionary

8
推荐指数
1
解决办法
5427
查看次数

如何使用带有TemplateFields的ObjectDataSource对GridView进行排序

背景:

我正在使用GridView和ObjectDataSource.我正在实施分页和排序.

在ObjectDataSource上:

        objectDataSource.TypeName = value;
        objectDataSource.SelectMethod = "Select";
        objectDataSource.SelectCountMethod = "SelectCount";
        objectDataSource.SortParameterName = "sortExpression";
        objectDataSource.EnablePaging = true;
Run Code Online (Sandbox Code Playgroud)

在GridView上:

        gridView.AllowPaging = true;
        gridView.AllowSorting = true;
        gridView.DataSource = objectDataSource;
Run Code Online (Sandbox Code Playgroud)

为了使分页和排序工作,我将"EnableSortingAndPagingCallbacks"设置为True.之前,我得到一个"System.Web.HttpException:GridView触发的事件排序,但没有处理." 这解决了它.

如果我在GridView中只使用BoundFields,这很好并且工作正常.

但是,如果我使用TemplateFields,我会收到"NotSupportedException:TemplateField不支持回调,因为某些控件无法在回调中正确更新.在GridView上关闭回调."

哪个,有道理.我只需要知道如何在不使用EnableSortingAndPagingCallbacks的情况下进行排序.

如果EnableSortingAndPagingCallbacks = True:

  • 寻呼作品
  • 排序工作
  • BoundFields工作
  • 模板列做工作

如果EnableSortingAndPagingCallbacks = False:

  • 寻呼作品
  • 排序并没有工作
  • BoundFields工作
  • TemplateFields工作

我的问题:

如何让Paging,Sorting和TemplateField同时工作?


澄清实施情况:

将ObjectDataSource与GridView一起使用需要实现一个名为Select的方法,该方法提供排序表达式,要返回的行数和起始行:

    public IEnumerable<CountyAndStateGridRow> Select(string sortExpression, int maximumRows, int startRowIndex)
    {
        string oql = "select County order by {" + sortExpression + "}" ;

        var counties = …
Run Code Online (Sandbox Code Playgroud)

asp.net gridview objectdatasource templatefield

7
推荐指数
1
解决办法
9817
查看次数

适用于C#Developer的Common Lisp IDE?

UPDATE

我决定现在和Clojure一起去.

LispDev还没准备好,Eclipse/cusp不够稳定让我觉得舒服.

至于Clojure,在经历了一个漫长的,非常令人沮丧的,非常讨厌的过程,试图让Eclipse/CCW,Netbeans/Enclojure和IntelliJ/La Clojure工作之后,我终于让Eclipse/CCW工作了.其余的仍处于大多数破碎状态.

(如果我避开它,我会记录什么了为获得的Eclipse/CCW工作.)

所以现在,我打算用它.我可能会回到CL,查看LispWorks和AllegroLisp的免费版本,但在Microsoft CLR环境中工作时,Clojure对我来说感觉更自然.

谢谢大家的帮助.


原始问题

我是一名非常熟悉Visual Studio的C#开发人员(使用Resharper).

我是Lisps的新手.我最近对Common Lisp和Clojure都感兴趣,并且发现了很多关于它们的好材料.

我已经尝试过Emacs + Slime,但它感觉就像一个非常倒退,过时的解决方案.我对它的力量毫不怀疑,但它的可用性与我以前的习惯完全不同.除了语言之外,我不想使用IDE.

Clojure和CL都有Eclipse插件.还有一些我见过的Clojure选项.由于我不是Java开发人员,所以我对这些IDE一无所知.

Eclipse是一个很好的起点吗?还有其他好的选择吗?

编辑:

这是我习惯的功能:

  • 语法高亮和自动注释(每个人都有这个,所以这是一个有争议的点)
  • 自动完成功能和变量名称
  • 实时显示所有函数重载和参数,以及在键入参数时向上/向下滚动列表的功能
  • 代码改进的语法建议,能够为你完成("使用const","转换为LINQ表达式(FP)","变量永远不会被赋值","变量永远不会被使用","变量"可能为null","函数将永远不会被使用",等等)
  • 提取方法/函数重构:选择一个文本块,然后将其提取到一个新函数中
  • 创建变量重构:选择一个文本块并创建一个变量(例如,let)
  • 重命名重构:重命名函数或变量声明,使用它的所有其他函数将被更新(自动搜索/替换)
  • 转到方法/函数的定义,变量
  • 查找特定方法/函数变量的用法/参考
  • 集成的基于文件夹的项目管理工具和构建工具
  • "将类移动到新文件",它根据类名创建一个新文件,并包含其所有方法
  • "基于类类型重命名文件",如果更改类名,则重命名文件
  • F9 /单击该行左侧以添加/删除断点
  • F10/F11在调试时进入或超过代码,同时带有箭头和突出显示以显示当前正在执行的代码(进入func执行,或者只是在此处执行)

大多数所有内容都可以在右键单击上下文菜单中使用,或者在您键入时作为悬停组合框或文本框.

我不是说emacs/slime不能这样做,但如果确实如此,它就不会在可用性技术方面使用任何类似的东西.

c# eclipse ide common-lisp visual-studio

7
推荐指数
2
解决办法
7787
查看次数