TQMY项目中跌过的坑--记录

分为技术方面和心得体会方面。
一、技术方面:

1、更新操作时一直提示标识符无效

因为数据库中把SPEC修改为ITEM_SPEC,以为页面中字段没有改过来,调试也自己跳出,后来发现是因为update语句更新时忘了写单引号,但是这个提示也太奇怪了,驴不对马嘴的感觉。
在这里插入图片描述
在这里插入图片描述

2、返回链接问题

一个页面被刷新N次之后(查询一次刷一次,有待改进)“返回”超链接用以下代码无法返回:

    <button runat="server" style="background-color:white;border:hidden;cursor:pointer" onclick="javascript:{self.location=document.referrer;return false;}" id="Button1" >
            <i class="fa fa-caret-right"></i> 返回
        </button> 

修改为以下代码,就可以正确返回指定页面,必须加return false,否则还是返回之前页面。

        <button runat="server" style="background-color:white;border:hidden;cursor:pointer" onclick="javascript:{self.location='../inv3500/inv3500.aspx';return false;}" id="Button1" >
            <i class="fa fa-caret-right"></i> 返回
        </button> 

button上绑定javascript事件知之甚少,需要学习。

3、PerformCallback经常执行无效

原因cmbBATCH_NO只写了ID,没写ClientInstanceName
在这里插入图片描述

4、局部更新textbox,并设置该textbox不可修改,即只读

需要用到ASPxCallbackPanel。

 <dx:ASPxCallbackPanel ID="ASPxCallbackPanel1" ClientInstanceName="stockNumCallback" runat="server" Width="100%" OnCallback="ASPxCallbackPanel1_Callback">
                                <PanelCollection>
                                    <dx:PanelContent runat="server">
                                        <dx:ASPxTextBox runat="server" ID="labStockNum" ReadOnly="true"/> 
                                    </dx:PanelContent>
                                </PanelCollection>
                            </dx:ASPxCallbackPanel>

后台获取该控件也与一般的有所区别:先需要获取ASPxCallbackPanel,再获取textbox。

   ASPxTextBox labStockNum = (ASPxGridView2.FindEditFormTemplateControl("ASPxCallbackPanel1") as ASPxCallbackPanel).FindControl("labStockNum") as ASPxTextBox;

一般的:

 ASPxComboBox cmbUnit = ASPxGridView2.FindEditFormTemplateControl("cmbUnit") as ASPxComboBox;
 设置只读(前台设置): <dx:ASPxTextBox runat="server" ID="labStockNum" ReadOnly="true"/> 

效果:正常显示,只是不能编辑。
在这里插入图片描述
ps: 不同于后台设置不可编辑:enabled=true
效果:整个编辑框为灰色
在这里插入图片描述

5、系统时间的获取方式。日期的转换。

oracle内置:sysdate,

string day = System.DateTime.Now.ToShortDateString();  //2019/5/21

需要转换后才能插入数据库中:

to_date('" + day + "', 'YYYY-MM-DD')

貌似和to_date(’" + day + "’, ‘YYYY / MM / DD’)插入数据库后没有差别。

6、自定义按钮CustomButtons

  <dx:GridViewCommandColumn Caption="操作" Width="100px" FixedStyle="Left" ShowClearFilterButton ="true">
        <CustomButtons>
            <dx:GridViewCommandColumnCustomButton Text="确认 &nbsp &nbsp" ID="Confirm"/>
            <dx:GridViewCommandColumnCustomButton Text="撤销" ID="Delete"/>
        </CustomButtons>
    </dx:GridViewCommandColumn>
     <dx:GridViewCommandColumn Caption="生成质检单">
         <CustomButtons>
           <dx:GridViewCommandColumnCustomButton ID="createCheckBill" Text="生成质检单"></dx:GridViewCommandColumnCustomButton>
        </CustomButtons>
    </dx:GridViewCommandColumn>

结果是这样:
在这里插入图片描述
自定义按钮对应的事件写在gridview的OnCustomButtonCallback中,用buttons的ID来判断哪个按钮。
在这里插入图片描述
后台事件处理代码:

   protected void ASPxGridView1_CustomButtonCallback(object sender, ASPxGridViewCustomButtonCallbackEventArgs e)
        {
            ASPxGridView grid = sender as ASPxGridView;
            //确认
            if (e.ButtonID == "Confirm")
            {
                grid.JSProperties.Add("cpCallbackName", "Confirm");
                string billCode = grid.GetRowValues(e.VisibleIndex, "BILL_CODE").ToString();
                string sql = "UPDATE INV_BILL_INOUT SET CONFIRM_STATUS='Y',CONFIRM_USER_ID='" + theUseId + "',CONFIRM_USER_NAME='" + theUserName + "',CONFIRM_TIME=sysdate WHERE COMPANY_CODE='" + theCompanyCode + "' AND BILL_CODE='" + billCode + "'";
                dc.ExeSql(sql);
                initGrid();
                grid.JSProperties.Add("cpMessage", "确认成功!");
            }

想弹出提示信息,需要在前台用ClientSideEvents的EndCallback和BeginCallback事件。需要注意的是,无论后台的CustomButtonCallback是否执行,EndCallback和BeginCallback事件都会执行,所以单纯在前台用alert来测试后台事件是否执行不可行。

<ClientSideEvents EndCallback="function(s,e){
        callbackName = grid.cpCallbackName;
        if(callbackName=='Confirm'){
            message = grid.cpMessage;
            alert(message);
        }
        if(callbackName=='Delete'){
           message=grid.cpMessage;
           alert(message);
        }
    }" BeginCallback="function(s,e){grid.cpCallbackName='';}" />   

7、PLSQL的常用操作:select * from user_objects

当前用户的所有对象,包含四列值object_id,object_name,object_type,oracle_maintained
https://blog.csdn.net/cacasi2568/article/details/8047343
select count(*) from user_objects 查看当前用户一共有多少个对象
在这里插入图片描述

8、excel导入数据问题

日期格式数据出现乱码,无法转换成DateTime类型。
https://blog.csdn.net/qq_26572075/article/details/80930756
用NPOI做excel导入时,DateTime在NPOI中的类型是Numeric ,判断如果是Numeric 类型的话再用.Net自带的DateUtil.IsCellDateFormatted(cell)方法判断是否为DateTime类型,如果2个都成立,取cell的DateCellValue属性

            if ( row.GetCell(j).CellType == CellType.Numeric && DateUtil.IsCellDateFormatted(row.GetCell(j)))
            {
                dataRow[j] = row.GetCell(j).DateCellValue;
            }

或者:

 if (cell.CellType == CellType.Numeric)
                        {
                            //content = cell.NumericCellValue.ToString();
                            short format = cell.CellStyle.DataFormat;
                            if (format != 0) { content = cell.DateCellValue.ToString(); }
                            else { content = cell.NumericCellValue.ToString(); }
                        }

9、combobox与multiple columns

效果:
在这里插入图片描述
代码实现:用ListBoxColumn

                      <dx:ASPxComboBox runat="server" ID="cmbITEM_CODE" Width="100%" ValidationSettings-ValidationGroup = " <%# Container.ValidationGroup %>" OnInit="cmbITEM_CODE_Init">
                        <Columns>
                            <dx:ListBoxColumn Caption="存货编码" FieldName="ITEM_CODE"></dx:ListBoxColumn>
                            <dx:ListBoxColumn Caption="存货名称" FieldName="ITEM_NAME"></dx:ListBoxColumn>
                            <dx:ListBoxColumn Caption="规格" FieldName="ITEM_SPEC"></dx:ListBoxColumn>
                            <dx:ListBoxColumn Caption="型号" FieldName="ITEM_MODEL"></dx:ListBoxColumn>
                            <dx:ListBoxColumn Caption="主计量单位" FieldName="UNIT_CODE"></dx:ListBoxColumn>
                        </Columns>
                    </dx:ASPxComboBox>

需要注意的是:保证每一行有一个唯一值,不能一对多,否则取数据会有问题。
combobox综合了textbox和listbox的特性,既可选择又可以输入。

10、listedit
下拉列表里设置多个项

 <dx:ASPxComboBox runat="server" ID="cmbBUS_TYPE" Width="100%"  ValidationSettings-ValidationGroup = " <%# Container.ValidationGroup %>">
                               <Items>
                                   <dx:ListEditItem Value="A" Text="业务1" />
                                   <dx:ListEditItem Value="B" Text="业务2" />
                                   <dx:ListEditItem Value="C" Text="业务3" />
                               </Items>
                                <ValidationSettings ErrorDisplayMode="ImageWithTooltip">
                                    <RequiredField ErrorText="不能为空." IsRequired="True" />
                                </ValidationSettings>
 </dx:ASPxComboBox>

心得体会方面

1、业务流程才是最复杂的,搞懂业务流程,写代码就很简单啦。
2、之所以工作效率低时因为不懂业务流程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值