FineUI 官方论坛

标题: 关于Grid翻页后行号(取值)的问题 [打印本页]

作者: michenboa    时间: 2012-4-12 23:39
标题: 关于Grid翻页后行号(取值)的问题
先上图
[attach]261[/attach][attach]262[/attach]
————————————————————————————————————————————————
————————————————————————————————————————————————

选择编号14,点 删除 按钮显示的行号(9)正确。
翻页之后,选择编号21,点 删除 按钮显示的是(6),导致无法删除所选定的数据。
请问这个问题该怎么解决??

作者: Landroid    时间: 2012-4-13 00:06
DataKeyNames="id"

Grid1.DataKeys[e.RowIndex][0].ToString();

作者: michenboa    时间: 2012-4-13 00:28
Landroid 发表于 2012-4-13 00:06
DataKeyNames="id"

Grid1.DataKeys[e.RowIndex][0].ToString();

你这个是在 Grid1_RowCommand 事件下写的吧?
Grid1_RowCommand事件下,可以批量删除吗?
我想写在button事件下。

请问,该怎么办?
作者: Landroid    时间: 2012-4-13 00:34
本帖最后由 Landroid 于 2012-4-13 00:36 编辑
michenboa 发表于 2012-4-13 00:28
你这个是在 Grid1_RowCommand 事件下写的吧?
Grid1_RowCommand事件下,可以批量删除吗?
我想写在button ...
  1.    
复制代码

作者: Landroid    时间: 2012-4-13 00:37
michenboa 发表于 2012-4-13 00:28
你这个是在 Grid1_RowCommand 事件下写的吧?
Grid1_RowCommand事件下,可以批量删除吗?
我想写在button ...
  1.     /// <summary>
  2.     /// 批量删除
  3.     /// </summary>
  4.     /// <param name="sender"></param>
  5.     /// <param name="e"></param>
  6.     protected void ButtonDelete_Click(object sender, EventArgs e)
  7.     {
  8.         int selectedCount = Grid1.SelectedRowIndexArray.Length;
  9.         int pageIndex = Grid1.PageSize * (Grid1.PageIndex);

  10.         if (selectedCount > 0)
  11.         {
  12.             for (int i = 0; i < selectedCount; i++)
  13.             {
  14.                 int rowIndex = Grid1.SelectedRowIndexArray[i] +  pageIndex;
  15.                 String id = Grid1.DataKeys[rowIndex][0].ToString();
  16.                //删除操作
  17.             }

  18.             //重新绑定
  19.             dt = GetDatatable();
  20.             BindGrid();
  21.         }
  22.         else
  23.         {
  24.             Alert.ShowInParent("未选中行!");
  25.         }
  26.     }
复制代码

作者: michenboa    时间: 2012-4-13 00:43
Landroid 发表于 2012-4-13 00:37

int pageIndex = Grid1.PageSize * (Grid1.PageIndex);

int rowIndex = Grid1.SelectedRowIndexArray +  pageIndex;

就缺这两句代码。

谢谢你这么晚还帮我解答问题!太谢谢你了!
作者: Landroid    时间: 2012-4-13 00:44
michenboa 发表于 2012-4-13 00:43
int pageIndex = Grid1.PageSize * (Grid1.PageIndex);

int rowIndex = Grid1.SelectedRowIndexArray +  ...

不客气,我也快睡了,困的不行了~~晚安喽
作者: 水若寒冰    时间: 2012-4-13 11:34
foreach (int rowIndex in Grid1.SelectedRowIndexArray)
{
    String id = Grid1.DataKeys[rowIndex][0].ToString();
     //删除操作
}更简单,连pageIndex 也不用判断。
作者: Landroid    时间: 2012-4-13 11:51
水若寒冰 发表于 2012-4-13 11:34
foreach (int rowIndex in Grid1.SelectedRowIndexArray)
{
    String id = Grid1.DataKeys[rowIndex][0]. ...

这种方式,在删除多条不在同一页的数据时是有问题的
作者: 水若寒冰    时间: 2012-4-13 13:59
Landroid 发表于 2012-4-13 11:51
这种方式,在删除多条不在同一页的数据时是有问题的

翻页之后你如何保存之前选中的数据?
作者: 水若寒冰    时间: 2012-4-13 13:59
Landroid 发表于 2012-4-13 11:51
这种方式,在删除多条不在同一页的数据时是有问题的

翻页之后你如何保存之前选中的数据?
作者: Landroid    时间: 2012-4-13 14:09
水若寒冰 发表于 2012-4-13 13:59
翻页之后你如何保存之前选中的数据?

我写的批量删除的方法中,关键两句
int pageIndex = Grid1.PageSize * (Grid1.PageIndex);
int rowIndex = Grid1.SelectedRowIndexArray +  pageIndex;

此时的rowIndex是数据实际对应的行索引
作者: 水若寒冰    时间: 2012-4-13 14:18
Landroid 发表于 2012-4-13 14:09
我写的批量删除的方法中,关键两句
int pageIndex = Grid1.PageSize * (Grid1.PageIndex);
int rowIndex  ...

我知道你这个的目的,问题是批量删除时只能批量删除当前页的选中项。难道你第一页选中之后翻到第二页,在第二页中又选中几项之后做批量删除,第一页选中的记录还能获取到?
作者: Landroid    时间: 2012-4-13 14:21
水若寒冰 发表于 2012-4-13 14:18
我知道你这个的目的,问题是批量删除时只能批量删除当前页的选中项。难道你第一页选中之后翻到第二页,在 ...

我写的批量删除就是为了解决这种情况的呀,我使用是可以的
作者: yezie    时间: 2012-4-13 14:42
我的行号处理:
<ext:TemplateField HeaderText="序号">
                                                                <ItemTemplate>
                                                                        <%# grid.PageSize * grid.PageIndex + Container.DataItemIndex + 1 %>
                                                                </ItemTemplate>
                                                        </ext:TemplateField>
作者: 水若寒冰    时间: 2012-4-13 14:42
Landroid 发表于 2012-4-13 14:21
我写的批量删除就是为了解决这种情况的呀,我使用是可以的

呵呵,我的是不行。无论内存分页还是数据库分页,都只能获取当前页选定的内容。
作者: Landroid    时间: 2012-4-13 15:08
水若寒冰 发表于 2012-4-13 14:42
呵呵,我的是不行。无论内存分页还是数据库分页,都只能获取当前页选定的内容。 ...

我的目前是内存分页,采用这种方式有效;数据库分页的话,就无效了
作者: michenboa    时间: 2012-4-13 15:55
水若寒冰 发表于 2012-4-13 11:34
foreach (int rowIndex in Grid1.SelectedRowIndexArray)
{
    String id = Grid1.DataKeys[rowIndex][0]. ...

不行吧,我以前就这么写的,翻页之后获取的行号就发生错误了
作者: 水若寒冰    时间: 2012-4-13 16:03
michenboa 发表于 2012-4-13 15:55
不行吧,我以前就这么写的,翻页之后获取的行号就发生错误了

我都写了很多次这个东东了,无论是内存分页还是数据库分页。翻页之后都无法获取之前选取的行记录。不知道Landroid 哥们儿是怎么做到的,另外如果按他说的那样做,会提示索引超出的错误。
作者: michenboa    时间: 2012-4-13 16:09
水若寒冰 发表于 2012-4-13 11:34
foreach (int rowIndex in Grid1.SelectedRowIndexArray)
{
    String id = Grid1.DataKeys[rowIndex][0]. ...

就这段代码。总共有7条数据。pagesize=5.
第一页取行号没问题。翻页之后,第二条数据你获取的行号是多少? 是1还是6?
作者: michenboa    时间: 2012-4-13 16:10
水若寒冰 发表于 2012-4-13 16:03
我都写了很多次这个东东了,无论是内存分页还是数据库分页。翻页之后都无法获取之前选取的行记录。不知道 ...

翻页的确取不了前面页的数据,如果加个viewstate,把行号存里面呢? 能解决不?
作者: 水若寒冰    时间: 2012-4-13 17:23
michenboa 发表于 2012-4-13 16:09
就这段代码。总共有7条数据。pagesize=5.
第一页取行号没问题。翻页之后,第二条数据你获取的行号是多少 ...

你说的是rowIndex?数据库分页之后取得的rowIndex还是从1开始
作者: 水若寒冰    时间: 2012-4-13 17:25
michenboa 发表于 2012-4-13 16:10
翻页的确取不了前面页的数据,如果加个viewstate,把行号存里面呢? 能解决不? ...

我认为没那必要了,数据非常多的话,分页选择就多操作几次得了。
作者: michenboa    时间: 2012-4-13 17:35
水若寒冰 发表于 2012-4-13 17:23
你说的是rowIndex?数据库分页之后取得的rowIndex还是从1开始

内存分页之后rowindex还是是从0开始吧?
那么还是取不到正确的数据
作者: Landroid    时间: 2012-4-14 01:41
水若寒冰 发表于 2012-4-13 14:42
呵呵,我的是不行。无论内存分页还是数据库分页,都只能获取当前页选定的内容。 ...

经再次验证,我上面粘贴的代码确实不能完成多页删除记录的操作,只能删除当前页选中的记录~
作者: michenboa    时间: 2012-4-14 02:15
Landroid 发表于 2012-4-14 01:41
经再次验证,我上面粘贴的代码确实不能完成多页删除记录的操作,只能删除当前页选中的记录~ ...

看我回的21楼
顺便问一下,怎么能获得论坛的VIP会员啊?
作者: Landroid    时间: 2012-4-14 02:37
michenboa 发表于 2012-4-14 02:15
看我回的21楼
顺便问一下,怎么能获得论坛的VIP会员啊?

viewstate是一种解决办法
---
你可以向sanshi申请vip  (不过我感觉和注册会员没啥区别哦,当然,我就是看帖回帖。。)

sanshi 也会定期将一批活跃用户转为vip的
作者: 水若寒冰    时间: 2012-4-16 09:23
呵呵,我还以为楼上有高招呢。我都做过很多次了,翻页之后不能保存之前选中的数据。




欢迎光临 FineUI 官方论坛 (https://fineui.com/BBS/) Powered by Discuz! X3.4