随笔-64  评论-222  文章-20  trackbacks-22

1.更新数据出错问题
使用ASPxGridView控件时,点Edit编辑一行,出来Update和cancel,编辑完数据后点击Update,出错:在正在编辑的那行下方会出来一汗背景淡红色字体是红色的字“不支持所指定的方法”,英文是Specified method is not supported.
图1:

解决办法是用数据源控件加载数据,指定ASPxGridView控件DataSourceID等于该数据源控件的ID,并指定一个KeyFieldName。我是看了官方的DEMO才知道这样做的,我原来是用我们项目自己的数据访问层提供的接口加载数据在.ASPX.CS文件中绑定给它的,这样做不无更新数据的原因我解释为:ASPxGridView控件本身只做显示数据的作用,但网页加载完毕后就不存在数据源,因此不法Update数据,需要用数据源控件保存数据以便更新,并且更新数据是让数据源控件去做的。这样解释不合理之处还望赐教。
数据源控件有很多,我这里用的是ObjectDataSource,因为我们项目本身已经有数据访问层存在了,不需要用其他的数据源控件访问数据库。在这个WEB项目下新建一个文件夹App_Code,在App_Code下新建个类abc,定义命名空间为DEMO,using数据访问层的命名空间,添加一个方法LoadData,返回DataTable类型的值,方法参数随意,在这个方法中加载数据返回;再添加一个方法UpdateData,参数至少1个以上,就是需要传给存储过程的一些ID列和要修改的值(这些参数都要在ObjectDataSourceUpdateParameters属性中添加,它们的名字与这些参数名相同,同时它们还要在ASPxGridView控件的Columns中存在,如果是不想显示的列可以设置Visible="False"),那么对于我们肯定是要修改一些值的要不然就不用Update了,无需返回值,方法中调用数据访问层的方法修改数据。
然后设置ObjectDataSource控件的TypeName="DEMO.abc",SelectMethod="LoadData",UpdateMethod="UpdateData",同时还要添加SelectParameters的参数名和值,参数名要跟LoadData函数中的参数名相同,值有各种选择,可以是控件的属性,也可以是Session变量,根据需要设定,如下图。好了,这回没有红色的字出来了,而且数据修改成功。

2.显示格式样式的设置
图2:

这个是他官方的DEMO,他们的这个视图样式是怎么做出来的,我花了一些时间学习它。我们经常出现有很多字段要显示,但由于页面宽度的限制我们不能将太多的信息显示在一行中,但在我们编辑的时候要显示它,并且可能还要编辑更新它,要想在编辑的时候显示成上图的样式,那么要进行以下设置:
A>确认SettingsEditing的Mode=EditFormAndDisplayRow,EditFormColumnCount=3,设置成像图2中的多行进行编辑而不是图1中的嵌入在一行中,每行显示列数为3列。
图3:

B>设置各列属性,如下图。
Visible表示在非编辑状态下是否可见,它可以用来设置有些太长字段或次要字段不可见
EditFormSettings的Visible用来设置在编辑状态下是否可见,设置它为true就可以让太长字段或次要字段在编辑时显示了
VisibleIndex指在非编辑状态下该列显示的位置,0表示该列显示在第一列,以此类推
EditFormSettings的VisibleIndex同上,但它是在编辑状态下的位置
有了上面四个属性就可以很好的设置非编辑与编辑两种状态下以不用的顺序显示了,下面还有两个重要的属性:
EditFormSettings的ColumnSpan表示该列占用多少列,相当于html中的td标签的colspan属性
EditFormSettings的RowSpan表示该列占用多少行,相当于html中的td标签的rowspan属性







NO PAINS NO GAINS

posted on 2007-11-13 19:59 Rick Carter 阅读(1933) 评论(83)  编辑 收藏 所属分类: .NET

评论:
#1楼  2008-01-01 22:26 | dacsd [未注册用户]
在动态帮定数据源时,发现AspxGridView的排序、分组等功能失效了,请问该如何解决,谢谢
  回复  引用    
#2楼 [楼主] 2008-01-02 10:56 | Rick Carter      
@dacsd
没遇过这种情况,你是用代码赋数据源给ASPxGridView.DataSource的?用数据源控件试试看吧!我的理解是:ASPxGridView只是个显示数据的控件,它不能存储数据,而分组和排序是对数据操作,只有它还能知道数据源的情况下才能进行这些操作,但用代码赋数据源给ASPxGridView.DataSource在页面加载完毕后就无法获得它的数据源了,用数据源控件应该是可以的。我这个理解方式同样能解释这篇随笔中的第一条。
  回复  引用  查看    
#3楼  2008-01-02 21:43 | dacsd [未注册用户]
谢谢您,我的确是发现了这个问题,出现的原因是这样的:
现有一个数据表,其中有两个日期字段,一个是开工日期另一个是结算日期,对不同的用户可能要分别按照开工日期查询或者按照结算日期查询,而ASP.NET环境中我设置了两个SqlSatasource,分别对开工日期和结算日期进行检索数据,而将根据用户选择设置SqlSatasource1或者SqlSatasource2与AspxGridView进行匹配,虽然数据按照要求天中到ASPxGridView中去了,但是,表格的排序、分组等功能都不能实现了,请您给看看如何解决,我的版本是7.2.2,谢谢
  回复  引用    
#4楼  2008-01-02 21:44 | dacsd [未注册用户]
“虽然数据按照要求天中到ASPxGridView中去了”应为“虽然数据按照要求填充到ASPxGridView中去了”
  回复  引用    
#5楼  2008-01-07 15:58 | smgzfhxy [未注册用户]
ASPxGridView 进行数据插入的时候 ,有些字段是必须填写的字段,如果不填写的话 插入操作后,无法将信息过滤出来, 那么如何在用户进行插入操作的时候 提示 某项 字段必须填写不能为空呢---- 或者当该字段为空时前台数据提交时报错 --“该项字段不能为空”版本7.2
  回复  引用    
#6楼  2008-01-18 19:59 | dacsd [未注册用户]
还有一个问题:
添加了编辑模板后,希望根据不同的用户指定某些字段只读属性,比如我想指定TextBox1的属性为只读,当该用户编辑该行时,TextBox1为只读,该如何做,谢谢
  回复  引用    
#7楼  2008-01-18 20:13 | dacsd [未注册用户]
还有一个问题:
添加了编辑模板后,希望根据不同的用户指定某些字段只读属性,比如我想指定TextBox1的属性为只读,当用户添加记录时,指定某些字段为只读可以实现,当该用户编辑该行时,TextBox1为只读,一直不能实现,请问该如何做,谢谢

  回复  引用    
#8楼  2008-01-19 07:36 | dacsd [未注册用户]
protected void Button7_Click(object sender, EventArgs e)
{
int visibleIndex = Grid.FocusedRowIndex;
Grid.StartEdit(visibleIndex);
}
为什么会出现这个错误“未将对象引用设置到对象的实例。”
请版主看看,谢谢
  回复  引用    
#9楼  2008-01-21 10:02 | 紫雨 [未注册用户]
请教:
editform中,如果字段的名称(caption="中文"),则显示的标签是两行的,有无办法让它显示为一行?
谢谢。
  回复  引用    
#10楼 [楼主] 2008-01-21 13:23 | Rick Carter      
@紫雨
在Developer Express .NET v7.2以下的版本上要设置每个字段的EditFormCaptionStyle的Wrap属性为False就行了,像下图:
  回复  引用  查看    
#11楼 [楼主] 2008-01-21 14:01 | Rick Carter      
@dacsd
首先非常感谢你如此关注这篇随笔,由于我工作比较忙总是没有时间去考虑你所提出的问题,我只能做如下简单的答复。在Developer Express的安装目录下有Demo,你可以打开他们官方的这些示例看看去寻找你的答案,对于你要做这么多复杂的工作而用某个控件前应该要相当熟悉这个(套)控件,或者你能够随手可得大量的关于该控件的介绍和帮助信息,要不然你将很困难,甚至有可能你要从头再来。
1.排序、分组等功能都不能实现,这个我也不知道,要靠你自己去解决了。
2.关于数据验证的问题,在列属性对话框中有个ValidationSettings(验证设置),你去研究下,也许能满足你的要求,我也没用过。
3.每个列都有个ReadOnly属性,你可以根据从数据库取来的数据判断该用户是否有该字段的编辑权限,赋相应的false或true就行了。
4.“未将对象引用设置到对象的实例。” ,我想是Grid=null了,当一个页面加载完毕后,期间用到的类成员变量就全为null了,也就是服务器端会将这些变量从内存中清除,那么你再想在其他的事件发生时调用这些变量就会出错。你可以把这些事放在客户端的js中去做,服务器端不存在了,客户端还是有的。

  回复  引用  查看    
#12楼  2008-01-21 14:29 | dacsd [未注册用户]
首先谢谢版主的回复:
1.排序、分组等功能都不能实现。
这个问题已经解决了。
2.关于数据验证的问题,在列属性对话框中有个ValidationSettings(验证设置),你去研究下,也许能满足你的要求,我也没用过。
正在练习。
3.每个列都有个ReadOnly属性,你可以根据从数据库取来的数据判断该用户是否有该字段的编辑权限,赋相应的false或true就行了。
好像不行,比如我将NAME列设为只读,当我用了EditForm模板时,编辑NAME列用的是一个TextBox一个控件,仅仅将列设为只读不行,看样子必须将对应的TextBox设为只读才行,可我一直不知道该如何根据用户权限设置相应的控件为只读;
4.“未将对象引用设置到对象的实例。”
我正在修改程序



再次感谢
  回复  引用    
#13楼 [楼主] 2008-01-21 14:59 | Rick Carter      
@dacsd
像这样试试:
ReadOnly=<%=Session["BYHBJQX"]%>
  回复  引用  查看    
#14楼  2008-01-21 16:27 | 紫雨(HB)      
谢谢楼主回复,问题已经解决。

  回复  引用  查看    
#15楼  2008-01-21 20:32 | dacsd [未注册用户]
不好意思。可能我的描述不清楚,我再详细说一下:
现有一个表,我希望一些用户对表中的记录进行签认,只能对某一个字段进行操作,不是修改其他字段内容,对不同权限的用户所让他修改的字段是不同的,在添加了EditForm模板的情况下,字段值是通过TextBox等一些控件显示的,如何指定那些TextBox只读,哪些可以编辑呢?谢谢
  回复  引用    
#16楼 [楼主] 2008-01-22 18:12 | Rick Carter      
@dacsd
就是像这样啊,ReadOnly=<%=Session["BYHBJQX"]%> <%=Session["BYHBJQX"]%> ,在xyz.aspx的源代码下(非设计视图下)有每个列的设置,其中就可以设置它的ReadOnly属性,你可以在cs文件下设置Session["BYHBJQX"]=True/False(这个可以是从数据库读出来的也可以是通过表达式计算出来的),这样那一列就动态的是否只读了。
  回复  引用  查看    
#17楼  2008-01-22 20:01 | dacsd [未注册用户]
谢谢,我明白了,明天回去试试
  回复  引用    
#18楼  2008-01-24 00:59 | marco [未注册用户]
这个控件似乎没有横向滚动条
  回复  引用    
#19楼 [楼主] 2008-01-24 17:34 | Rick Carter      
@marco
是的,我也没发现横向滚动条,如果列数多的话会把页面撑的很大。
  回复  引用  查看    
#20楼  2008-01-30 10:44 | leizerun [未注册用户]
楼主,aspxgridview能实现删除有弹出提示吗?如何实现,谢谢
  回复  引用    
#21楼 [楼主] 2008-01-30 14:06 | Rick Carter      
@leizerun
添加客户端事件,用aspxgridview的ClientSideEvents属性。
  回复  引用  查看    
#22楼  2008-02-07 20:53 | dacsd [未注册用户]
新年好,感谢您对我的帮助,谢谢
  回复  引用    
#23楼  2008-02-11 23:32 | 高原之上      
@dacsd
你怎么解决排序问题的呢,我分页也不行,
 问题的原因是如楼主所说的数据源的问题吗?
 希望你能回复我,谢谢
 我的邮箱:guatai@msn.com
  回复  引用  查看    
#24楼 [楼主] 2008-02-17 18:55 | Rick Carter      
@dacsd
谢谢,也祝你新年好。
  回复  引用  查看    
#25楼  2008-03-01 15:14 | !1234 [未注册用户]
在动态帮定数据源时,发现AspxGridView的排序、分组等功能失效
是如何解决的!
  回复  引用    
#26楼  2008-03-01 17:24 | !1234 [未注册用户]
已知如何解决,改成在linqdatasoure 的selecting 事件中自定义数据即可!
非常感谢各位!
  回复  引用    
#27楼 [楼主] 2008-03-02 20:34 | Rick Carter      
@!1234
原来是这样,谢谢分享.
  回复  引用  查看    
#28楼  2008-03-03 12:12 | 旌浪      
請教博主,如果我不想用前面的Update,Cancel按鈕,另外在aspxGridView外面寫兩個按鈕代替,相應的Update是批量更新的。該如何做呢?
可否加msn:
jinliangliu#163.com,我們也有買這個控件,一起討論下。
  回复  引用  查看    
#29楼  2008-03-05 20:56 | garyxue [未注册用户]
我在使用ASPxGridView时,发现FocusRow已经改变,但FocusedRowChanged事件却没有触发,该事件仅在Load或Delete按钮时才触发,正常移动始终无法触发.我使用的是7.2版本.
谢谢博主.
  回复  引用    
#30楼  2008-03-05 22:23 | pains [未注册用户]
@garyxue
要设置这个:EnableCallBacks=True
  回复  引用    
#31楼  2008-03-06 09:21 | garyxue [未注册用户]
首先谢谢博主。但我将EnableCallBacks=True也没用,不知是什么原因。

  回复  引用    
#32楼  2008-03-26 17:48 | 无名小辈 [未注册用户]
当修改一条记录时,再对当条记录进行删除,就会出现错误,提示如下
找不到与ViewState中存储的原始值中的给定键相匹配的行,请确保"keys"字典包含与上一个Select操作返回的行对应的唯一键值.
请问如何解决?
  回复  引用    
#33楼 [楼主] 2008-03-26 18:00 | Rick Carter      
@无名小辈
应该要指定KeyFieldName=某个唯一的字段,不知道是不是这个问题
  回复  引用  查看    
#34楼  2008-03-26 18:52 | 无名小辈 [未注册用户]
KeyFieldName已指定
如果没有更新操作,删除是正常的,只要更新了,就会出这个提示
  回复  引用    
#35楼 [楼主] 2008-03-26 19:18 | Rick Carter      
@无名小辈
更新了之后把数据重新加载下
  回复  引用  查看    
#36楼  2008-03-26 19:29 | 无名小辈 [未注册用户]
看来只有这个样子,
而且这种情况出现的次数应该非常少
  回复  引用    
#37楼 [楼主] 2008-03-26 19:33 | Rick Carter      
@无名小辈
祝你成功!
  回复  引用  查看    
#38楼  2008-04-10 22:48 | sunraise [未注册用户]
楼主,我也遇到29楼的问题,不知怎么解决,望指点一下。
  回复  引用    
#39楼  2008-05-28 13:00 | 小2黑 [未注册用户]
ASPxGridView分页怎么做。找了好久都没找到,楼上有会的教教我,谢谢
  回复  引用    
#40楼  2008-06-05 10:45 | Yuzeng.Li [未注册用户]
请问 页脚的Page 1 of 1 (5 items) 如何改成 中文呢?
  回复  引用    
#41楼 [楼主] 2008-06-05 11:17 | Rick Carter      
@Yuzeng.Li
在ASPxGridView控件的属性里的SettingsPager下的:

修改成:

就OK了
  回复  引用  查看    
#42楼  2008-06-12 09:40 | Howard Queen      
楼主是个好人,楼主如果是女人,我爱你;楼主如果是男人,我敬佩你!解决了一个看似简单却让人头疼的小麻烦(eidt form wrap)!
  回复  引用  查看    
#43楼 [楼主] 2008-06-12 09:48 | Rick Carter      
@Howard Queen
我是男人,呵呵
  回复  引用  查看    
#44楼  2008-06-13 07:53 | fans [未注册用户]
楼主你好,请问一下,怎么用自已的方法代替AspxGridView中的更新方法。就是更新到数据库的方法。因为他的更新方法不太适合我.
可能的话转发一下到我邮箱.fanshiyou@163.com
  回复  引用    
#45楼 [楼主] 2008-06-13 12:40 | Rick Carter      
@fans
看下 28楼 的同志,联系他,他有实现方法。
  回复  引用  查看    
#46楼  2008-06-18 10:44 | 林 [未注册用户]
楼主你好。
我碰到的一个问题。当点击ASPxGridView的编辑或是新建的时候。文本框不让输入。

  回复  引用    
#47楼 [楼主] 2008-06-18 11:28 | Rick Carter      
@林
你给的信息太少了,在安装目录下有官方的DEMO,去看看他们怎么做的吧
  回复  引用  查看    
#48楼  2008-06-18 11:56 | 林 [未注册用户]
谢谢 楼主。我去查DEMO了。
可是没有解决。我表述的不太清楚。

我用的是ObjectDataSource绑定的。
要是用SqlDataSourcr绑定,就可以编辑。
就是输入框不可用那种效果。值能都显示出来,保存也可以保存,就是文本框里面的值不让编辑。这项我这么设的 ReadOnly = False

我想把图片给你贴上来,可是不会。
  回复  引用    
#49楼 [楼主] 2008-06-18 12:34 | Rick Carter      
@林
ObjectDataSource 是像这样设置的吗?

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="LoadBJ"
TypeName="AoboWzgl.WEB.BJ" UpdateMethod="UpdateBJ">
<SelectParameters>
<asp:SessionParameter Name="IGYSID" SessionField="ID" Type="Int32" />
<asp:SessionParameter DefaultValue="0" Name="ICGFS" SessionField="ICGFS" Type="Int32" />
</SelectParameters>
<UpdateParameters>
<asp:Parameter Name="IWZID" />
<asp:Parameter Name="IGYSID" />
<asp:Parameter Name="ICGMXID" />
<asp:Parameter Name="IGYSBJID" />
<asp:Parameter Name="NBJ" />
<asp:Parameter Name="CBZ" />
</UpdateParameters>
</asp:ObjectDataSource>

  回复  引用  查看    
#50楼  2008-06-18 13:17 | 林 [未注册用户]
谢谢 !
这是我的找码

<dxwgv:GridViewCommandColumn ShowSelectCheckbox="True" VisibleIndex="3">
<ClearFilterButton Visible="True"></ClearFilterButton>

<DeleteButton Visible="True"></DeleteButton>

<NewButton Visible="True"></NewButton>

<EditButton Visible="True"></EditButton>
</dxwgv:GridViewCommandColumn>
<dxwgv:GridViewDataTextColumn FieldName="ID" VisibleIndex="0" >
<EditFormSettings Visible="true" CaptionLocation="Top" VisibleIndex="0" />
<EditFormCaptionStyle Wrap="False">
</EditFormCaptionStyle>

</dxwgv:GridViewDataTextColumn>
<dxwgv:GridViewDataTextColumn FieldName="Name" VisibleIndex="1">
<CellStyle BackColor="#804040"></CellStyle>

<EditFormSettings Visible="true"/>
<EditFormCaptionStyle Wrap="True"></EditFormCaptionStyle>

</dxwgv:GridViewDataTextColumn>
<dxwgv:GridViewDataTextColumn FieldName="MakeID" VisibleIndex="2">
<EditFormSettings Visible="true" />
</dxwgv:GridViewDataTextColumn>
</Columns>
</dxwgv:ASPxGridView>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="selectModel"
TypeName="Class1" UpdateMethod="updateModel" EnableViewState="false"
><SelectParameters>
<asp:Parameter Name="ID" />
<asp:Parameter Name="MakeID" />
<asp:Parameter Name="Name" />
</SelectParameters>
<UpdateParameters>
<asp:FormParameter FormField="makeid" Name="MakeID" Type="String" />
<asp:FormParameter FormField="name" Name="Name" Type="String" />
<asp:FormParameter FormField="id" Name="ID" Type="String" ConvertEmptyStringToNull="False" />
</UpdateParameters>
</asp:ObjectDataSource>
  回复  引用    
#51楼 [楼主] 2008-06-18 13:34 | Rick Carter      
@林
我想是你的ObjectDataSource 设置不对,我把我的代码注释下,你根据你的代码情况更改,如果还有问题再回复我。

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="LoadBJ" //指定加载数据的函数,它是TypeName指定的类中的函数
TypeName="AoboWzgl.WEB.BJ" //指定加载更新等操作使用的类
UpdateMethod="UpdateBJ"> //指定更新数据的函数,它是TypeName指定的类中的函数

  回复  引用  查看    
#52楼  2008-06-18 13:48 | 林 [未注册用户]
楼主辛苦了。谢谢 !
我要是用下面这个数据源。点击编辑后,输入框是可以修改的。
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ParkingConnectionString %>"
SelectCommand="SELECT [ID], [Name] FROM [Colour]"></asp:SqlDataSource>

而用这种数据源,点编辑之后,文本框就是不可编辑的。

<asp:ObjectDataSource ID="objS" runat="server" SelectMethod="selectModel" TypeName="Class1"
UpdateMethod="updateModel">
<SelectParameters>
<asp:Parameter Name="MakeID" Type="String" />
<asp:Parameter Name="Name" Type="String" />
<asp:Parameter Name="ID" Type="String" />
</SelectParameters>
<UpdateParameters>
<asp:Parameter Name="MakeID" />
<asp:Parameter Name="Name" />
<asp:Parameter Name="ID" />
</UpdateParameters>

</asp:ObjectDataSource>

下面是我Class1类

Imports Microsoft.VisualBasic

Public Class Class1
Public Function selectModel(ByVal MakeID As String, ByVal Name As String, ByVal ID As String)


Dim comm As String = System.Configuration.ConfigurationManager.ConnectionStrings("ParkingConnectionString").ConnectionString
Dim conn As New Data.SqlClient.SqlConnection
Dim abc As New Data.SqlClient.SqlCommand




conn.ConnectionString = comm

conn.Open()

abc.Connection = conn
abc.CommandText = "select ID,MakeID,Name from Model"


Dim dr As Data.SqlClient.SqlDataReader = abc.ExecuteReader



Return dr


End Function


Public Sub updateModel(ByVal MakeID As String, ByVal Name As String, ByVal ID As String)

Dim comm As String = System.Configuration.ConfigurationManager.ConnectionStrings("ParkingConnectionString").ConnectionString
Dim conn As New Data.SqlClient.SqlConnection
Dim abc As New Data.SqlClient.SqlCommand

conn.ConnectionString = comm

conn.Open()

abc.Connection = conn

abc.CommandText = "update Model set MakeID= '" & MakeID & "', Name ='test ' where ID= 1"

abc.ExecuteNonQuery()





End Sub


End Class

  回复  引用    
#53楼 [楼主] 2008-06-18 13:49 | Rick Carter      
@林
你应该把EnableViewState="false"去掉,或者设置EnableViewState="true",就可以了

  回复  引用  查看    
#54楼  2008-06-18 14:07 | 林 [未注册用户]
十分感谢楼主!

我找到问题了。是我在Calss1类里面返回的数据类型不对。应该返回的是DATASET类型的数据源就可以了。

我是个新手,刚接处 .net ,以后还要多多请教楼主。:)
  回复  引用    
#55楼 [楼主] 2008-06-18 14:09 | Rick Carter      
@林

  回复  引用  查看    
#56楼  2008-06-18 16:19 | sun_raise [未注册用户]
请教楼主
#29楼的问题相似,是不是FocusedRowChanged事件只有clientevent,没有服务端事件哟,我看他的demo都是通过客户端来实现的。
麻烦你了
  回复  引用    
#57楼 [楼主] 2008-06-18 16:59 | Rick Carter      
@sun_raise
如果FocusedRowChanged事件调用的函数不需要是与服务器进行通信就可以完成,那么我觉得用在客户端用JS做比较好,要不然焦点行更改都要刷新页面执行一段服务器端的程序岂不是太浪费资源了。
  回复  引用  查看    
#58楼  2008-06-24 14:50 | hualinapec [未注册用户]
请问楼主我如果想不添加任何数据源控件并且要修改数据,如何解决呢?
  回复  引用    
#59楼 [楼主] 2008-06-25 08:22 | Rick Carter      
@hualinapec
我曾经也想这样做,但没成功
  回复  引用  查看    
#60楼  2008-06-27 16:42 | 刘 [未注册用户]
楼主,请教一下,用aspgridview如何一条记录多行显示呢,因为字段太多,一行显示不了
  回复  引用    
#61楼 [楼主] 2008-06-27 18:12 | Rick Carter      
@刘
这个好像不行,只能被正在编辑的行才能显示成多行的,你可以让它显示的时候不用显示太多字段,编辑状态才列出所有字段。
  回复  引用  查看    
#62楼  2008-07-03 09:41 | Manfred [未注册用户]
请问后台绑定数据源的方式,排序和分页是怎么实现的???始终没找到解决方法。。。。。。。 pageIndexchanged事件里如何给pageindex赋值??

  回复  引用    
#63楼  2008-07-03 11:04 | afei929 [未注册用户]
请教楼主个问题:枚举类型的字段如何在ASPxGridView中编辑或新增的时候显示为下拉框。
比如我定义了一个描述性别的枚举:enum Sex{F,M}

然后定义了一个持久对象
Person{
public string name;
public Sex sex;
}
然后将该对象绑定到ASPxGridView(用的是XPODataSource),想要性别字段在编辑是为下拉框。
  回复  引用    
#64楼  2008-07-03 11:06 | afei929 [未注册用户]
@刘
设置为预览列
  回复  引用    
#65楼  2008-07-07 11:08 | Flashcqxg [未注册用户]
请问博主:

这个控件可不可以设计成录入控件的样子?比如我想做成绩录入,录入完成后一页后再保存,而不是一行一行的编加后保存?
谢谢。
  回复  引用    
#66楼 [楼主] 2008-07-07 14:27 | Rick Carter      
@Flashcqxg
这叫“多行编辑(Multi Row Editing)”,我给你个连接,是dev官方的,他们有实现,不要谢我,要谢就谢#28楼的同志,我这个也是他给我的,要不我还以为无法做到多行编辑呢,呵呵。http://demos.devexpress.com/Tutorials/Grid/Editing/MultiEditing/MultiEditing.aspx
  回复  引用  查看    
#67楼  2008-07-07 15:05 | 凯锐      
@Rick Carter
我還以為你自己要用呢,原來是造福其他人啊!呵呵..
用了這麼長時間,感覺Dev的這個控件是好強大!但個人的作品什么的還是不敢用。可能是要收費的原因吧。
  回复  引用  查看    
#68楼 [楼主] 2008-07-07 15:14 | Rick Carter      
@凯锐
呵呵,有好多人都问了这个问题,我也没做过(其实我短时间还做不出来,呵呵),所以就找你要这个你曾经给我看过的网址了。
看来要整理下这篇随笔了,把一些常见的问题和解决办法列出来。
  回复  引用  查看    
#69楼 [楼主] 2008-07-07 15:24 | Rick Carter      
@凯锐
感觉这个控件用的人还是很多的,就是1.收费,2.用户体验感觉不怎么好(指的是实现高级应用总是很复杂)。
我有做这个控件的想法,开源,呵呵,但一定要做出好用的。
  回复  引用  查看    
#70楼  2008-07-08 08:48 | afei929      
楼主看看我的问题嘛,我是#63的.
  回复  引用  查看    
#71楼 [楼主] 2008-07-08 09:17 | Rick Carter      
@afei929
对不起。
这个也是可以实现的,但要自己写一些代码,同样是上面的网站里就有,叫
Populate a Combo Box on the Fly ,添加(组装)下拉框,http://demos.devexpress.com/ASPxGridViewDemos/GridEditing/FillComboOnFly.aspx
它大概的思路就是在ASPxGridView的grid_CellEditorInitialize服务器事件里用ASPxComboBox combo = e.Editor as ASPxComboBox;
然后给combo添加项,以及给combo添加一个Callback事件。
 Using
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Collections.Generic;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using DevExpress.Web.ASPxCallbackPanel;
using DevExpress.Web.ASPxGridView;
using DevExpress.Web.ASPxEditors;
using DevExpress.Web.ASPxClasses; 
 
public partial class GridEditing_FillComboOnFly : BasePage {
     
protected void Page_Load(object sender, EventArgs e) {
         
if(!IsPostBack && !IsCallback) {
             grid.StartEdit(
3);
         }

     }

 
     
protected void grid_CellEditorInitialize(object sender, ASPxGridViewEditorEventArgs e) {
         
if(!grid.IsEditing || e.Column.FieldName != "City"return;
         
if(e.KeyValue == DBNull.Value || e.KeyValue == nullreturn;
         
object val = grid.GetRowValuesByKeyValue(e.KeyValue, "Country");
         
if(val == DBNull.Value) return;
         
string country = (string)val;
 
         ASPxComboBox combo 
= e.Editor as ASPxComboBox;
         FillCityCombo(combo, country);
 
         combo.Callback 
+= new CallbackEventHandlerBase(cmbCity_OnCallback);
     }

 
     
protected void FillCityCombo(ASPxComboBox cmb, string country) {
         
if (string.IsNullOrEmpty(country)) return;
 
         List
<string> cities = GetCities(country);
         cmb.Items.Clear();
         
foreach (string city in cities)
             cmb.Items.Add(city);
     }

     List
<string> GetCities(string country) {
         List
<string> list = new List<string>();
         AccessDataSourceCities.SelectParameters[
0].DefaultValue = country;
         DataView view 
= (DataView)AccessDataSourceCities.Select(DataSourceSelectArguments.Empty);
         
for(int i = 0; i < view.Count; i++{
             list.Add((
string)view[i][0]);
         }

         
return list;
     }

     
protected void AccessDataSource1_Modifying(object sender, SqlDataSourceCommandEventArgs e) {
         DemoSettings.AssertNotReadOnly();
     }

 
     
private void cmbCity_OnCallback(object source, CallbackEventArgsBase e) {
         FillCityCombo(source 
as ASPxComboBox, e.Parameter);
     }

 }

 

  回复  引用  查看    
#72楼  2008-07-08 15:43 | afei929      
看来没有那么现成的实现方式。楼主提供的代码看过了。有一点就是这样Filter Row中显示的还是文本框,不过也可以在相关的事件中进行相同的设置。
Thanks a lot

  回复