FineUI 官方论坛

标题: Grid 的 PreRowDataBound 和 RowDataBound [打印本页]

作者: 这里不能为空    时间: 2013-8-16 09:59
标题: Grid 的 PreRowDataBound 和 RowDataBound
页面代码:

  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
问题解决,改用OnPreRowDataBound事件就行了。
作者: sanshi    时间: 2013-8-16 12:12
这里不能为空 发表于 2013-8-16 10:24
问题解决,改用OnPreRowDataBound事件就行了。

关于 PreRowDataBound 和 RowDataBound 的区别,可以看这篇文章:http://www.cnblogs.com/sanshi/archive/2012/10/19/2730381.html
作者: liaofeifan    时间: 2014-7-25 17:44
问题解决了一定要帮助大家,又摸索了半天
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;
        }
作者: Stark11    时间: 2020-4-29 20:35
liaofeifan 发表于 2014-7-25 17:44
问题解决了一定要帮助大家,又摸索了半天
protected void gridSurportMeterial_PreRowDataBound(object sen ...

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




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