FineUI 官方论坛

标题: 关于Gride的OnRowDataBound事件 [打印本页]

作者: 袭月    时间: 2013-12-18 17:03
标题: 关于Gride的OnRowDataBound事件
当第一次数据绑定时,可以正常的显示农田和农药的名称,但是当年度和连队的下拉列表改变后,重新绑定农田时,农田名称就不能正确显示。农田的绑定是随着连队的改变而改变,而农药的绑定是固定的。

作者: 沉寂    时间: 2013-12-19 17:06
那条件改变数据改变没出问题吧,会不会是你查询错了呢。或者没有数据,使得它为空啊
作者: 袭月    时间: 2013-12-19 18:04
沉寂 发表于 2013-12-19 17:06
那条件改变数据改变没出问题吧,会不会是你查询错了呢。或者没有数据,使得它为空啊 ...

没有,重新绑定后的数据debug看是正确的,就是显示不出来。
作者: 沉寂    时间: 2013-12-20 09:20
袭月 发表于 2013-12-19 18:04
没有,重新绑定后的数据debug看是正确的,就是显示不出来。

你可以把这事件里的代码贴出来吗
作者: 袭月    时间: 2013-12-20 11:34
沉寂 发表于 2013-12-20 09:20
你可以把这事件里的代码贴出来吗

行绑定代码
protected void Grid1_RowDataBound(object sender, FineUI.GridRowEventArgs e)
        {
            ntxx_BLL nt_bll = new ntxx_BLL();
            int ldid = Convert.ToInt32(ldDPList.SelectedValue);
            DataTable nt_table = nt_bll.Query_By_Ld(ldid).Tables[0];
            ntDPList.DataSource = nt_table;
            ntDPList.DataTextField = "ntmc";
            ntDPList.DataValueField = "ntID";
            ntDPList.DataBind();
        }
//年度下拉列表改变事件
        protected void yearDPList_SelectedIndexChanged(object sender, EventArgs e)
        {
            BindGrid1();
        }

        //连队下拉列表改变事件
        protected void ldDPList_SelectedIndexChanged(object sender, EventArgs e)
        {
            BindGrid1();
            ntxx_BLL nt_bll = new ntxx_BLL();
            int ldid = Convert.ToInt32(ldDPList.SelectedValue);
            DataTable nt_table = nt_bll.Query_By_Ld(ldid).Tables[0];
            ntDPList.DataSource = nt_table;
            ntDPList.DataTextField = "ntmc";
            ntDPList.DataValueField = "ntID";
            ntDPList.DataBind();
        }
每次下拉列表如果先选择连队,再选择年度,就可以正常显示,若先选择年度,在选择连队,则农田名称不能显示。
作者: 沉寂    时间: 2013-12-20 14:20
袭月 发表于 2013-12-20 11:34
行绑定代码
protected void Grid1_RowDataBound(object sender, FineUI.GridRowEventArgs e)
        {

我想说的是你这代码好多重复啊,根本就不需要rowdatabound啊,你直接绑定表格不就行了啊,RowDataBound是行绑定,就是绑定表格中某行某列的值(需特许处理的)用的比较好,不然就直接表格绑定了。你这里不知道重复绑定了多少次,它得到的是最后一次绑定的结果吧
作者: 沉寂    时间: 2013-12-20 14:30
  /// <summary>
        /// 查询符串条件
        /// </summary>
        private string SearchString
        {
            get
            {
                StringBuilder sb = new StringBuilder();
                string sortField = this.gridReexamScoreEntry.SortField;
                string sortDirection = gridReexamScoreEntry.SortDirection;
                sb.Append(" 1=1");
                 if(ldDPList.SelectVaule!="未选择")
                {
                       sb.Append(string.Format(" AND 字段='{0}'", this.ldDPList.SelectedValue));
                }
                                if (string.IsNullOrEmpty(sortField))
                {
                   sortField = "AdjustNo";
                  sortDirection = "asc";
                }
                //sb.Append(string.Format(" order by {0} {1} ", sortField, sortDirection));
                return sb.ToString();
            }
        }
//绑定表格
private void BindGrid1()
{
       DataTable nt_table = BLL.GetTableBySqlCondition(SearchString);
         ntDPList.DataSource = nt_table;
          ntDPList.DataBind();
}
//年度下拉列表改变事件
        protected void yearDPList_SelectedIndexChanged(object sender, EventArgs e)
        {
            BindGrid1();
        }

        //连队下拉列表改变事件
        protected void ldDPList_SelectedIndexChanged(object sender, EventArgs e)
        {
            BindGrid1();
        }


作者: 袭月    时间: 2013-12-23 11:07
沉寂 发表于 2013-12-20 14:30
///
        /// 查询符串条件
        ///

我试了,当重新绑定的时候还是出不来农田名称……
作者: 沉寂    时间: 2013-12-23 11:41
袭月 发表于 2013-12-23 11:07
我试了,当重新绑定的时候还是出不来农田名称……

不可能吧,这只是一个很简单的表格绑定啊,怎么出不来数据呢,是不是你的DataField写的不对啊
作者: 袭月    时间: 2013-12-24 16:19
沉寂 发表于 2013-12-23 11:41
不可能吧,这只是一个很简单的表格绑定啊,怎么出不来数据呢,是不是你的DataField写的不对啊 ...

<x:RenderField ColumnID="ntID" DataField="ntID" RendererFunction="renderNt" FieldType="Int"
     HeaderText="农田">
         <Editor>
                  <xropDownList ID="ntDPList" runat="server" Required="true"></xropDownList>
         </Editor>
</x:RenderField>


<script type="text/javascript">
        var ntID = '<%= ntDPList.ClientID %>';
        function renderNt(value, metadata, record, rowIndex, colIndex) {
            return X(ntID).x_getTextByValue(value);
        }
</script>并不是每次数据都出不来的,主要是当上面的连队下拉列表改变时,重新绑定数据的时候就显示不出来,我debug看了,ntDPList控件上所绑定的数据是正确的,只是显示不出来……

作者: 沉寂    时间: 2013-12-25 13:38
袭月 发表于 2013-12-24 16:19
var ntID = '';
        function renderNt(value ...

是这样的,有没有可能你那改变的时候ntDPList下拉列表没初始化绑定数据,所以虽然赋给了它selectvalue值,但是它没有绑定数据,所以显示不出来呢。你在那选择改变事件中再加个绑定ntDPList下拉列表事件,得在表格绑定前,看行不行
作者: 袭月    时间: 2013-12-25 16:49
沉寂 发表于 2013-12-25 13:38
是这样的,有没有可能你那改变的时候ntDPList下拉列表没初始化绑定数据,所以虽然赋给了它selectvalue值 ...

我当时加断点看了,当改变的时候,ntDPList下拉列表的DataSource,DataTextField,DataValueField的绑定都是新查询出来的。而且如果你双击编辑,这些数据是能够显示的,但就是页面加载的时候显示不出来。
作者: 沉寂    时间: 2013-12-25 17:29
袭月 发表于 2013-12-25 16:49
我当时加断点看了,当改变的时候,ntDPList下拉列表的DataSource,DataTextField,DataValueField的绑定都 ...

原来是这样啊,你已经把问题缩小到一点了,那就是事件改变时页面没有跟着改变,也就是js没有重新触发,需要收到点击才能触发显示出来啊。那是因为js已经加载的原因吗?想办法让它跟着重新加载试试。store.reload




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