FineUI 官方论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

FineUI首页 WebForms - MVC & Core - JavaScript 常见问题 - QQ群 - 十周年征文活动

FineUI(开源版) 下载源代码 - 下载空项目 - 获取ExtJS - 文档 在线示例 - 版本更新 - 捐赠作者 - 教程

升级到 ASP.NET Core 3.1,快、快、快! 全新ASP.NET Core,比WebForms还简单! 欢迎加入【三石和他的朋友们】(基础版下载)

查看: 5182|回复: 4

Grid 的 PreRowDataBound 和 RowDataBound

[复制链接]
发表于 2013-8-16 09:59:23 | 显示全部楼层 |阅读模式
页面代码:

  1.             <x:Grid ID="Grid1" runat="server" Title="列表" PageSize="30" OnPageIndexChange="Grid1_PageIndexChange"
  2.                 OnRowDataBound="RowDataBoundEventHandle" OnRowCommand="RowDataCommandEventHandle"
  3.                 DataKeyNames="ID" IsDatabasePaging="true" EnableRowNumber="true" EnableCheckBoxSelect="true"
  4.                 EnableMultiSelect="true" EnableHeaderMenu="true" ShowBorder="false" EnableColumnLines="true"
  5.                 AllowPaging="true" AllowSorting="true" ForceFitAllTime="true">
  6.                 <Columns>
  7.                     <x:BoundField DataField="ID" HeaderText="ID" TextAlign="Center" />
  8.                     <x:LinkButtonField ID="btn_modify" DataTextField="ID" Icon="Pencil" HeaderText="修改"
  9.                         Width="50px" TextAlign="Center" CommandName="Modify" />
  10.                     <x:LinkButtonField ID="btn_delete" Icon="Delete" HeaderText="删除" Width="50px" TextAlign="Center"
  11.                         CommandName="Delete" />
  12.                 </Columns>
  13.             </x:Grid>
复制代码
首先,无法使用使用<%#Eval("ID") %>赋值:
  1. <x:LinkButtonField ID="btn_modify" DataTextField="ID" Icon="Pencil" HeaderText="修改"
  2.                         Width="50px" TextAlign="Center" CommandName="Modify" CommandArgument='<%#Eval("ID") %>' />
复制代码
页面生成结果:__doPostBack('Panel1$Grid1','Command$1$1$Modify$');


然后使用RowDataBound方式来赋值:
  1. protected void RowDataBoundEventHandle(object sender, FineUI.GridRowEventArgs e)
  2.         {
  3.             DataRowView row = e.DataItem as DataRowView;
  4. btn_modify.CommandArgument = row["ID"].ToString();
  5.             btn_modify.Text = row["ID"].ToString();
  6.             btn_delete._commandArgument = row["ID"].ToString();
  7.         }
  8.         protected void RowDataCommandEventHandle(object sender, FineUI.GridCommandEventArgs e)
  9.         {
  10.             if ("Delete".Equals(e.CommandName))
  11.             {
  12.                 FineUI.Alert.Show(e.CommandName + ":" + e.CommandArgument.ToString());
  13.             }
  14.             else if ("Modify".Equals(e.CommandName))
  15.             {
  16.                 FineUI.Alert.Show(e.CommandName + ":" + e.CommandArgument.ToString());
  17.             }

  18.         }
复制代码
发现,赋值后的CommandArgument为上一行Row的row["ID"]


仔细看了下源码,发现貌似是使用API:Control.DataBind(); 来完成这项内容的。

请各位熟悉控件开发的帮我分析下?
 楼主| 发表于 2013-8-16 10:24:23 | 显示全部楼层
问题解决,改用OnPreRowDataBound事件就行了。
回复 支持 反对

使用道具 举报

发表于 2013-8-16 12:12:32 | 显示全部楼层
这里不能为空 发表于 2013-8-16 10:24
问题解决,改用OnPreRowDataBound事件就行了。

关于 PreRowDataBound 和 RowDataBound 的区别,可以看这篇文章:http://www.cnblogs.com/sanshi/archive/2012/10/19/2730381.html
回复 支持 反对

使用道具 举报

发表于 2014-7-25 17:44:01 | 显示全部楼层
问题解决了一定要帮助大家,又摸索了半天
protected void gridSurportMeterial_PreRowDataBound(object sender, GridPreRowEventArgs e)
        {
            var command = DataBinder.Eval(e.DataItem, "FILEURL").ToString();
            var btn = gridSurportMeterial.FindColumn("colDownload") as LinkButtonField;
            if (btn != null)
                btn.CommandArgument = command;
        }
回复 支持 反对

使用道具 举报

发表于 2020-4-29 20:35:19 | 显示全部楼层
liaofeifan 发表于 2014-7-25 17:44
问题解决了一定要帮助大家,又摸索了半天
protected void gridSurportMeterial_PreRowDataBound(object sen ...

查遍了整个FineUI论坛和知识星球,只有你这里才解答了如何使用PreRowDataBound定位某行某列的值,严重感谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|FineUI 官方论坛 ( 皖ICP备13005369号-1 )

GMT+8, 2020-7-12 15:19 , Processed in 0.102596 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表