小编Jul*_*n N的帖子

GridView排序:SortDirection总是升序

我有一个gridview,我需要在用户点击标题时对其元素进行排序.
它的数据源是一个List对象.

aspx以这种方式定义:

<asp:GridView ID="grdHeader" AllowSorting="true" AllowPaging="false" 
    AutoGenerateColumns="false" Width="780" runat="server"  OnSorting="grdHeader_OnSorting" EnableViewState="true">
    <Columns>
        <asp:BoundField DataField="Entitycode" HeaderText="Entity" SortExpression="Entitycode" />
        <asp:BoundField DataField="Statusname" HeaderText="Status" SortExpression="Statusname" />
        <asp:BoundField DataField="Username" HeaderText="User" SortExpression="Username" />
    </Columns>
</asp:GridView>
Run Code Online (Sandbox Code Playgroud)

后面的代码是这样定义的:
首先加载:

protected void btnSearch_Click(object sender, EventArgs e)
{
    List<V_ReportPeriodStatusEntity> items = GetPeriodStatusesForScreenSelection();
    this.grdHeader.DataSource = items;
    this.grdHeader.DataBind();
}
Run Code Online (Sandbox Code Playgroud)

当用户点击标题时:

protected void grdHeader_OnSorting(object sender, GridViewSortEventArgs e)
{
    List<V_ReportPeriodStatusEntity> items = GetPeriodStatusesForScreenSelection();
    items.Sort(new Helpers.GenericComparer<V_ReportPeriodStatusEntity>(e.SortExpression, e.SortDirection));
    grdHeader.DataSource = items;
    grdHeader.DataBind();
}
Run Code Online (Sandbox Code Playgroud)

我的问题是e.SortDirection始终设置为Ascending.
我有一个类似代码的网页,它运作良好,e.SortDirection在升序和降序之间交替.

我做错了什么 ?

asp.net sorting gridview

66
推荐指数
7
解决办法
13万
查看次数

从JSON Schema生成C#类

我正在创建一个C#WCF Web服务,它以JSON格式返回大量数据.客户端是一个iPad应用程序,目前正在由另一个团队开发,所以我正在研究规范,没有示例数据.
目前,JSON字符串是由.net框架创建的,我的Web服务返回一个C#对象,其中包含然后使用DataContracts由框架序列化的所有信息.

我的问题是通信规范只包含JSON Schema文件(基于http://json-schema.org/).为了便于开发,我想在C#中生成相应的类,但由于文件包含大量信息,而且有十几个文件,我真的不想手动创建这些类.

所以我正在寻找一种工具,可以让我:

  • 从JSON模式生成C#类.
  • 将JSON模式转换为XSD文件.然后创建类很容易,因为有很多工具可以从XSD生成类.

我找到了许多工具来验证JSON模式的JSON字符串,或者从JSON字符串生成类,但似乎没有任何帮助我的东西.
JSON.NET,但它似乎是一个库,而不是一个工具,我没有找到任何有关使用它生成类的信息.

所以,如果有人知道一个工具或者有关于如何生成这些类的想法(我尝试了一个用Java创建类但我无法使其工作的工具).

.net wcf json jsonschema

61
推荐指数
6
解决办法
5万
查看次数

带有约束的SQL Server 2005 drop column

我有一个带有"DEFAULT"约束的列.我想创建一个删除该列的脚本.

问题是它返回此错误:

Msg 5074, Level 16, State 1, Line 1  
The object 'DF__PeriodSce__IsClo__4BCC3ABA' is dependent on column 'IsClosed'. 
Msg 4922, Level 16, State 9, Line 1 
ALTER TABLE DROP COLUMN IsClosed failed because one or more objects access this column.
Run Code Online (Sandbox Code Playgroud)

我找不到一种简单的方法来删除一个列及其所有相关的约束(只发现了查看系统表的大脚本......必须(!!)这是一个"好"的方法.)

由于DEFAULT约束的名称是随机生成的,我不能按名称删除它.


更新:
约束类型为"DEFAULT".

我看到了你们提出的解决方案,但我发现它们都非常"脏"......你不觉得吗?我不知道它是用于Oracle还是MySQL,但它可以做类似的事情:

DROP COLUMN xxx CASCADE CONSTRAINTS 
Run Code Online (Sandbox Code Playgroud)

它会丢弃所有相关的约束......或者至少它会自动删除映射到该列的约束(至少CHECK约束!)

在MSSQL中没有类似的东西吗?

sql-server sql-server-2005

60
推荐指数
6
解决办法
7万
查看次数

varchar中有多少个字符(最大)

当数据类型为VARCHAR(MAX)时,SQL Server 2008数据库字段可以包含多少个字符?

size varchar sql-server-2008

47
推荐指数
3
解决办法
13万
查看次数

使用动态数据自定义高级实体验证

当用户使用Entity Framework将其更改保存在动态数据屏幕中时,我正在寻找一种解决方案来执行一些自定义实体验证(需要数据库访问,跨成员验证......).
验证比我对属性的处理更复杂(它需要访问数据库等)

你能拦截SaveChanges电话吗?
我试图ValidateEntity在DbContext对象中覆盖,但动态数据似乎没有调用它(可能是因为它使用内部ObjectContext,不知道为什么),并且重写SaveChanges也没有帮助.
我没有看到任何可以订阅的事件......

文档应该有所帮助:

通过重写OnValidate方法或处理Validate事件来自定义单个数据字段的验证,这些事件在更改任何数据字段时调用.此方法允许您为单个字段添加验证和业务逻辑.这种方法比为单个字段添加验证更通用.当相同的验证逻辑可以应用于多个数据字段时,它很有用.它还允许您执行涉及多个字段的验证检查.

但我正在使用POCO Entity Framework 6类,所以没有OnValidate方法可以覆盖,而且从我读到的内容是LinqToSql,我找不到Validate他们提到的事件.

我试图在我的DbContext的构造函数中订阅SavingChanges内部事件,ObjectContext手动调用ValidateEntity,但我不知道如何处理结果.如果我抛出DbEntityValidationException(或本文中ValidationException建议的那样),ASPNET会像任何异常一样处理它(黄色屏幕).

实施IValidatableObject也不起作用.

我也尝试实现我自己DynamicValidator看看会发生什么,但没有成功,它似乎处理异常(如果我覆盖ValidateException,并设置断点,我看到它)但它仍然冒泡到默认错误处理程序并显示黄色屏幕.我肯定错过了什么.

那么,在保存为动态数据/ EF之前,您应该如何对实体执行复杂的验证(交叉字段,查询等)?

c# validation entity-framework asp.net-dynamic-data

14
推荐指数
1
解决办法
882
查看次数

Linq to Entities:在NText字段上使用ToLower()

我正在使用SQL Server 2005,带有区分大小写的数据库.

在搜索功能中,我需要使用"where"子句创建Linq To Entities(L2E)查询,该子句使用以下规则将多个字符串与数据库中的数据进行比较:

  1. 比较是一个"包含"模式,而不是严格比较:因为L2E中允许字符串的Contains()方法很容易
  2. 比较必须不区分大小写:我在两个元素上使用ToLower()来执行不敏感的比较.

所有这些都表现得非常好,但我遇到了以下异常:"我的一个字段上的参数数据类型ntext对于较低函数的参数1无效".

看来该字段是一个NText字段,我无法对其执行ToLower().
我该怎么做才能在NText字段上执行不区分大小写的Contains()?

c# linq-to-entities sql-server-2005

13
推荐指数
2
解决办法
9188
查看次数

在Database First中更改实体和属性名称

我正在启动一个必须使用现有数据库的新应用程序,该数据库使用一些在.net中非常烦人的命名约定(表名以几个指定表的业务域的三元组开头,列名以表trigram开头,三元组是大写的,由下划线等分隔,).

我想做的是编写一个简单的重命名规则(这很简单,就像找到最后一个下划线并在此之后采取一切)并将其应用于实体框架中.我真的不想在编辑器中逐个编辑名称,特别是因为数据库可能会改变,我不想多次这样做.

我正在使用Database First(因为数据库已经存在并且它是"主")和EF 4.x DbContext Generator,它开箱即用(虽然命名很糟的类和属性).

我编辑了T4模板以重命名生成的实体和属性,但是当我尝试执行任何请求时,DbContext对象找不到与我尝试请求的实体匹配的表,并且我得到了以下异常:

实体类型[实体名称]不是当前上下文的模型的一部分.

这显然是为什么它没有找到表:没有什么告诉它如何匹配实体名称和表,因为我在运行中更改它.我读到我可以在OnModelCreating(DbModelBuilder modelBuilder)方法中添加指令,但这不在Database First中使用(默认的T4模板在其中添加了一个例外,以防万一).

所以现在我卡住了,我不知道如何指定匹配.

以下是我的几个想法,但不确定它是否正确或可行:

  • 使用"复数/单数"API来更改实体的名称?听起来像一个肮脏的解决方法.但它可能有效(尽管没有尝试).
  • 寻找一种即时编辑EDMX文件的方法.
  • 之后编辑EDMX但它可能使过程复杂化(在设计器中编辑,然后执行工具来改变EDMX,然后运行自定义工具来重新生成实体和DbContext ......而今天我只需要在设计器中编辑).
  • 使用Code First(因为使用不同的实体名称而不是表名,通过DbContext类中的属性或指令似乎更容易),但听起来将它与现有数据库一起使用并不会更复杂.

任何的想法 ?还是我错过了什么?

c# entity-framework entity-framework-4 database-first ef-database-first

11
推荐指数
1
解决办法
5270
查看次数

Nant:更改文件权限

我有一个ASP.NET应用程序.基本上交付流程是这样的:

  • Nant构建应用程序并在开发人员的计算机上创建一个zip文件,其中包含没有SVN文件夹和无用文件的应用程序文件.此文件随Nant脚本一起提供.
  • zip和nant文件将复制到客户端的计算机上
  • Nant脚本用zip文件中包含的文件替换当前的网站文件.

我的问题是,当我尝试打开网站时,我有一个未经授权的访问错误.似乎文件需要为用户" IIS_WPG " 设置权限.

我无权更改IIS配置,因此我必须手动更改每个文件的权限.每次我更换文件时,权限都会被删除,我需要再次设置它们.

所以我有两个问题:

  • 我可以用Nant更改文件权限吗?怎么做 ?
  • 有可能避免这个问题吗?(开发人员在他们的计算机上没有此用户)

nant file-permissions

8
推荐指数
2
解决办法
2294
查看次数

Visual Studio:在调试停止时执行清理代码

我们开发了一个使用Excel互操作库(Microsoft.Office.Interop.Excel)来读取一些Excel文件的应用程序.

当应用程序中出现问题时,将处理事件Application.ThreadException,因此将释放资源(Excel已关闭...).

问题是,当我们使用VS调试器时,如果我们停止执行(因为进程在异常或断点上中断,有很多原因导致我们这样做),资源不会被释放而Excel会停留打开.当然,下次启动应用程序时......由于文件上有锁,它会崩溃.

所以我正在寻找一种强制释放Excel对象的方法,即使在使用调试器停止时也是如此.

有什么建议吗?

c# debugging visual-studio

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

阻止实体框架自动附加实体

我正在使用实体框架,它的实体用于数据库表示和业务对象.
因此,这意味着一些被操纵的实体应始终与上下文分离.

我设法从数据库读取和写入数据,但我在更新时遇到一个小问题:
我有一个表"Stock",它链接到一个表"Warehouse".

目前的过程是这一个(简化,但精神仍然存在,还有更多的领域):

  • 创建一个新对象Stock并在其字段中填入一些值(date ...)
  • 当前仓库(从数据库中提取整个请求的对象)与Stock对象相关联
  • 该对象被发送到DAL方法,其工作是保存它.
  • DAL方法检查数据库中当天(相同日期,库和相同类型)的库存项是否已存在
  • 如果存在,该方法将从提取的对象更新卷并保存更改.
  • 否则,将插入新的Stock对象.

这里的问题是,当我创建新的Stock对象并将其关联到Warehouse时,对象EntityState自动设置为"已添加".因此,当我执行SaveChanges()并且Stock已经存在时,该行被更新并添加了一个新的Stock行...
我想要的是保持新的Stock对象分离,直到我自己附加它.我不希望它自动发生.

我找到的唯一解决方案是在保存对象已经存在之前从上下文中分离新对象.
我也可以Detach()仓库对象,但这不是一个令人满意的解决方案,我认为在真实情况下有更多的项目需要关联,我不确定在他们身上使用Attach()和Detach()是个好主意.
在这种情况下,直到我自己"添加"它到上下文,该对象只是一个"传输"对象,我希望它不在上下文中.

关于如何保持Stock对象分离的任何想法?


代码(可能有点不正确,我是通过内存写的):

Stock stk = new Stock();
stk.Date = DateTime.Now;
stk.Volume = 100;          //so far stk is "Detached" and that's cool.
stk.Warehouse = CurrentWarehouse; //stk become "Added" and that's less cool.

DAL.Stock.Instance.Save(stk);
Run Code Online (Sandbox Code Playgroud)

在Save()中:

var existing = (from s in Context.CurrentContext.Stock
where s.Warehouse.WarehouseId == stk.Warehouse.WarehouseId && s.Date == stk.Date && s.Type == 2
select s).FirstOfDefault();

if(existing != null)
{
    existing.Volume = stk.Volume;
    Context.CurrentContext.Detach(stk); …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework c#-3.0

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