FineUI 官方论坛

标题: Grid能够动态创建编辑列RenderField吗? [打印本页]

作者: 舞柯庶    时间: 2014-8-8 12:00
标题: Grid能够动态创建编辑列RenderField吗?
Grid能够动态创建编辑列RenderField吗?需要里面有可以编辑数据的。
比如
   <f:RenderField Width="140px" DataField="ItemCode" ColumnID="ItemCode" FieldType="String" HeaderText="代码" TextAlign="Center" SortField="ItemCode">
                <Editor>
                    <f:TextBox ID="tbx_ItemCode" Required="true" Enabled="false" CssStyle="Color:red"  AutoPostBack="true" runat="server"></f:TextBox>
                </Editor>
            </f:RenderField>


这个应该如何创建呢,主要是里面的TextBOX

作者: Bingo    时间: 2014-8-17 21:49
同问  搞了一会没有搞出来
作者: 舞柯庶    时间: 2014-8-20 23:14
老大,能给个例子吗?
作者: xxdddail    时间: 2014-8-22 15:13
可以的。这是我的实现代码的简化版。
  1.    // 注意:动态创建的代码需要放置于Page_Init(不是Page_Load),这样每次构造页面时都会执行
  2. //一定要在Page_Init中动态创建,在Page_Load虽然可以动态创建,但是后面会得不到数据
  3.         protected void Page_Init(object sender, EventArgs e)
  4.         {
  5.             InitGrid();
  6.         }        

  7.        private void InitGrid()
  8.         {
  9.             InitGridColumn();
  10.         }

  11.         private void InitGridColumn()
  12.         {
  13.             FineUI.RenderField rf = null;   
  14.             DataTable dt= FetchDataTable();
  15.             FineUI.NumberBox numberBox = null;
  16.             String emptyText = "数量";
  17.             String dataField = "";      
  18.             foreach (DataRow row in dt.Rows)
  19.             {
  20.                 rf = new FineUI.RenderField();
  21.                 dataField = row["DATA_FIELD"].ToString();
  22.                 rf.ID = dataField;
  23.                 rf.ColumnID = dataField;
  24.                 rf.HeaderText = row["HEADER_TEXT"]ToString();
  25.                 rf.DataField = dataField;
  26.                  
  27.                  //添加编辑控件的部分。NumberBox可以依实际需要更换,比如换在TextBox
  28.                     numberBox = new NumberBox();
  29.                     numberBox.ID = "numberBox_" + dataField;
  30.                     numberBox.EmptyText = emptyText;
  31.                     numberBox.NoDecimal = true;
  32.                     rf.Editor.Add(numberBox);  
  33.                
  34.                
  35.                 rf.TextAlign = FineUI.TextAlign.Center;
  36.                 Grid1.Columns.Add(rf);
  37.             }
  38.         }

  39.       //使用DataTable模拟需要动态生成列的标题和绑定字段
  40.        private DataTable FetchDataTable()
  41.         {
  42.             DataTable dt = new DataTable();
  43.             dt.Columns.Add("HEADER_TEXT");
  44.             dt.Columns.Add("DATA_FIELD");

  45.             for (int i = 0; i < 10; i++)
  46.             {
  47.                 DataRow row = dt.NewRow();
  48.                 row["EADER_TEXT"] = String.Format("H_{0}", i + 1);
  49.                 row["DATA_FIELD"] = String.Format("D_{0}", i + 1);
  50.             }

  51.             return dt;
  52.         }
复制代码

作者: 舞柯庶    时间: 2014-8-22 15:35
厉害,马上试试
作者: 舞柯庶    时间: 2014-8-22 16:46
可以,不过有个问题,就是 点击下 编辑框,系统就视为编辑了。出现红色符号,其实没有编辑
作者: xxdddail    时间: 2014-8-22 17:59
舞柯庶 发表于 2014-8-22 16:46
可以,不过有个问题,就是 点击下 编辑框,系统就视为编辑了。出现红色符号,其实没有编辑 ...

这是numberBox控件本身的特性。这个不论是不是动态创建都会有这样的情况。
换用FineUI.TextBox就不会有这样的问题。

作者: 舞柯庶    时间: 2014-8-22 18:25
似的!!!!!
作者: 舞柯庶    时间: 2014-8-22 18:31
把类型 改为 FieldType="String" 就可以了
作者: 舞柯庶    时间: 2014-8-23 09:48
下拉框 转化函数 如何处理呢?
function renderGender();这个需要在后台添加,如何添加呢?如果能传递个控件名称,页面放一个函数就行了!不清楚如何处理
作者: 舞柯庶    时间: 2014-8-23 10:48
下拉框函数 做了个转化,方法比较拙,

    <Columns>
       <f:RowNumberField Width="30" TextAlign="Center"  ColumnID="RowNum"  ID="RowNum"  EnablePagingNumber="true" ></f:RowNumberField>
</Columns>

在生成下拉框时,增加以下语句;其中xDDL_ColRec=列号,ddl_"+xDataField=控件ID

Response.Write("<script type='text/javascript'>function renderGender(value, metadata, record, rowIndex, colIndex) {return F('" + RowNum.ClientID.Replace("RowNum", "ctl"+xDDL_ColRec+"_ddl_"+xDataField)+"').f_getTextByValue(value);}</script>");





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