C#中datagridview合计行问题

在C#中要实现 按条件查询,并把结果显示在datagridview中去,并实现数据和金额的汇总
C#中datagridview合计行问题

以下是代码:
  private void button1_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(textBox1.Text) && string.IsNullOrEmpty(textBox2.Text)
                && string.IsNullOrEmpty(textBox3.Text) && string.IsNullOrEmpty(textBox4.Text)
                && string.IsNullOrEmpty(textBox5.Text) && string.IsNullOrEmpty(comboBox1.Text))
            {
                MessageBox.Show("请输入查询条件!");

                return;
            }


            string sql = @"
                           select t.fnumber as 物料编号,t.fname as 物料名称 ,fmodel as 规格型号 ,fbillno as 单据编号,ts.fname as 仓库,
                           fdate as 日期,FQtyMust as 应发数量,Fqty as 实发数量  from ICStockBillEntry ICE
                            left join t_item t on t.FItemID=ICE.FItemID left join t_icitem tm on t.FItemID=tm.FItemID
                             LEFT JOIN ICStockBill ICS ON ICE.Finterid=ICS.Finterid 
                           left join t_stock ts on ICE.FDCStockID=ts.fitemid  where ftrantype=21";



            if (!string.IsNullOrEmpty(textBox1.Text))
            {
                var fstCondition = textBox1.Text.Trim();

                if (fstCondition.Length > 0)
                    sql = sql + "and t.fnumber LIKE '%" + textBox1.Text + "%' ";
            }

            if (!string.IsNullOrEmpty(textBox2.Text))
            {
                var secCondition = textBox2.Text.Trim();

                if (secCondition.Length > 0)
                    sql = sql + "and t.fname LIKE '%" + textBox2.Text + "%' ";
            }

            if (!string.IsNullOrEmpty(textBox3.Text))
            {
                var secCondition1 = textBox3.Text.Trim();

                if (secCondition1.Length > 0)
                    sql = sql + "and fmodel LIKE '%" + textBox3.Text + "%' ";
            }
            if (!string.IsNullOrEmpty(textBox4.Text))
            {
                var secCondition2 = textBox4.Text.Trim();

                if (secCondition2.Length > 0)
                    sql = sql + "and convert(varchar,fdate,120) LIKE '%" + textBox4.Text.Trim() + "%' ";
            }
            if (!string.IsNullOrEmpty(textBox5.Text))
            {
                var secCondition3 = textBox5.Text.Trim();

                if (secCondition3.Length > 0)
                    sql = sql + "and fbillno LIKE '%" + textBox5.Text + "%' ";
            }

            if (!string.IsNullOrEmpty(comboBox1.Text))
            {
                var secCondition4 = comboBox1.Text.Trim();

                if (secCondition4.Length > 0)
                    sql = sql + "and ts.fname LIKE '%" + comboBox1.Text + "%' ";
            }

            dateClass del5 = new dateClass();

            del5.BindDataGridView(dataGridView1, sql);
       
                   
        }
上面的SQL语句在数据库里运行时是 没有问题的,但是运行时不能按条件查询
如图:
C#中datagridview合计行问题

C#中datagridview合计行问题

跪求大师指点

回答: C#中datagridview合计行问题

  1. 在if判断之前,你的sql语句是一个整体字符串,if判断之后,只是把符合条件的字符串拼接到之前的字符串后面,不能进行指定位置拼接,比如:
    sql="select语句1 union all select语句2"
    if判断之后,如果符合条件,那就把“条件”拼接在后面,最后sql变成“select语句1 union all select语句2 条件”,它不可能变成“select语句1 条件 union all select语句2”的。

    如果想把条件加在第一个select后面,你可以将从union all开始到最后的字符串写在所有if之后,即
    string sql = @"
                               select tp.fname as 供应商名称,tm.fnumber as 物料编码,tre.fmodel as 规格型号,tre.fname as 物料名称,
                                pd.Fbillno as 单据编号,pd.FCheckDate as 审核日期 ,pd.fdate as 单据日期,
                            pod.Fdate as 交货日期,pod.FPrice as 单价,pod.fqty as 数量, 
                             pod.FAmount as 总金额,pod.FTaxAmount as 税额,pod.FAllAmount as 价税合计,(case pd.FStatus  when '0' then '保存' 
                       when '1' then '审核' when '3' then '关闭' else null end)as 单据状态
                        from POOrderEntry pod left join
                        POOrder pd on pod.FInterID=pd.FInterID left join t_icitemcore tre on tre.fitemid=pod.fitemid
                        left join t_item tm on tm.fitemid=tre.fitemid left join t_user tu on tu.FuserID=pd.FBillerID
                     left join t_Supplier tp on tp.fitemid=pd.fsupplyid where 1=1";
    。。。
    这里是if判断条件。。。
    。。。
    sql += " union all
                        select '合计','','','',
                      '',null,null, null,null,sum(pod.fqty)as 数量, sum(pod.FAmount) as 总金额,sum(pod.FTaxAmount) as 税额,
                       sum(pod.FAllAmount) as 价税合计,''from POOrderEntry pod left join
                        POOrder pd on pod.FInterID=pd.FInterID left join t_icitemcore tre on tre.fitemid=pod.fitemid
                        left join t_item tm on tm.fitemid=tre.fitemid left join t_user tu on tu.FuserID=pd.FBillerID
                     left join t_Supplier tp on tp.fitemid=pd.fsupplyid where 1=1";
    这样就可以了

vb.net中datagridview控件的显示问题

  1. Q
    我在我的窗口中用了datagridview控件,并令其fill在空间中。之后在打包发布后,在别的机器上安装时。只要是win xp系统的电脑,窗口的显示就是正常的,而win 7系统的电脑中datagridview因为形状变小了,自动添加了滚动条。而且我试了调整分辨率,发现也不行。只要是在xp系统的电脑不调整分辨率也都没问题。所以在此很迷惑,希望各位支招啊
  2. A
    行列的宽高  这些参数属性值上都有的,改改就行。 看看是否开了autosize,或者在程序里面是否更改了这些属性。

js 双击table中的某行 实现行前的checkbox选中 再双击 取消选中

  1. Q
    js 双击table中的某行 实现行前的checkbox选中 再双击 取消选中
  2. A
    http://hi.baidu.com/yiluwuyun/blog/item/4c53db006b10330a728da539.html  这里有你需要的代码

帮忙两个存储过程:查询表中第11-20行的数据(分页)spl server 和orcle两个版本

  1. Q
    谁帮忙写两个存储过程 急需:查询表中第11-20行的数据(分页)spl server 和orcle两个版本  谢谢
  2. A
    SQLServer的

    SELECT TOP 页大小 *
    FROM TestTable
    WHERE (ID >
    (SELECT MAX(id)
    FROM (SELECT TOP 页大小*页数 id
    FROM 表
    ORDER BY id) AS T))
    ORDER BY ID

    ----------------------------------------------

    SELECT TOP 页大小 *
    FROM TestTable
    WHERE (ID NOT IN
    (SELECT TOP 页大小*页数 id
    FROM 表
    ORDER BY id))
    ORDER BY ID

    上面第一个是用TOP与NOT IN进行分页的,第二种是利用ID和SELECT TOP分页
    *****************************************************************

    Oracl的 SELECT * FROM
    (
    SELECT A.*, ROWNUM RN
    FROM (SELECT * FROM TABLE_NAME) A
    WHERE ROWNUM <= 40
    )
    WHERE RN >= 21
    --------------------------------------
    SELECT * FROM
    (
    SELECT A.*, ROWNUM RN
    FROM (SELECT * FROM TABLE_NAME) A
    )
    WHERE RN BETWEEN 21 AND 40

    第一种要比第二种效率高很多,Oracl分页主要就是利用ROWNUM关键字来进行分页的

    希望对楼住有所帮助

请问activex控件中,这行代码的意思是什么?

  1. Q
    请问activex控件中,这行代码的意思是什么?

    const IID BASED_CODE IID_ABCEdit =
    { 0x2338ADE8, 0x941D, 0x4A2C, { 0xB8, 0xFD, 0xDE, 0x3E, 0x4C, 0xE7, 0xF9, 0x2C } };

    我猜  IID_ABCEdit  这是一个资源,可能表达一个编辑框,但是我在资源视图中却没有看到  IID_ABCEdit  这个东西,请问这是什么原因?
  2. A
    C 语言和其他语言不一样,没有元数据。
    那么在动态创建的时候,就不可能像其他语言一样使用 MyData *p = CreateObject("MyData"); 这样语句。
    那么为了弥补这个不足,使用了 GUID 来标识这个类型。AbcEdit_Interface *p = CreateInstance(IID_ABCEDIT);
    这样类工厂在接受到 IID_ABCEDIT 作为参数的时候,就知道创建一个 AbcEdit 的类实例了。

    当然这只是简单的一个描述。

从EXCEL表格中复制多行多列数据,能不能用代码粘贴到DBF中

  1. Q
    从EXCEL表格中复制多行多列数据,能不能用代码粘贴到DBF中?
    期待大神解答......
  2. A
    本帖最后由 dkfdtf 于 2014-01-03 17:07:44 编辑 应该是可以的,不过 Excel 中最好没有空的 cell,并且表中都是字符型字段

    例如:
    * 1. 先将剪贴板的数据放入一个数组
    alines(aTemp, _cliptext, 1+2, chr(9),chr(13),chr(10))
    select 表
    nCols = fcount()    && 确定字段数
    dimension aTemp[int(alen(aTemp)/nCol), nCol]
    * 2. 从数组导入到表
    apppend from array aTemp
    browse    && 看看结果


VB.NET中Datagridview控件中如何在綁定的數據集中,某個字段添加combobox框

  1. Q
    VB.NET中Datagridview控件中如何在綁定的數據集中,某個字段添加combobox框?查了一下要用到DataGridViewComboBoxColumn(),但是還是有問題!還請哪位大神幫忙解答,謝謝!
  2. A
    既然Datagridview已經綁定數據集了,那么 1想在顯示列中添加combobox下拉框,並且能夠在下拉框中選擇添加數據,这需要为combobox再绑定一个数据集 2或者重载Datagridview中对应的单元格为combobox,也就意味着重写一个专门用于你的Datagridview的combobox,如果你不会的话,那就用第一种方法把!

求教 关于使用游标将表中的偶数行输出的原理

  1. Q
    求教 关于使用游标将表中的偶数行输出的原理


    谢谢大家,题目要求将表中的偶数行输出,这是我从网上找的答案,我想问一下他这里定义了局部变量,[email protected][email protected][email protected]@i的值就是行的值了?还有一个问题,代码中有两个FETCH NEXT FROM C3 INTO语句,按照顺序是先打开游标就开始取数了,那第二个FETCH是什么意思呢?
    谢谢大家了。
  2. A
    这个游标是给无序扫描SELECT * FROM spj的,因为没有加相应的ORDER BY,就是无序扫描
    游标是按顺序的,第一次读取游标会定位到第一行去,每次读取都会移到这个查询的下一行

SQL表中插入新行,如何把这个行为告诉外部的程序?

  1. Q
    SQL表中插入新行,如何把这个行为告诉外部的c#,VB程序?除了循环查询之外还有木有其它方法?如果T-SQL能发个UDP包出来就好了,希望各位大侠指点
  2. A
    MSDN SqlDependency
    SqlDependency事件 示例
    这个应该可以

webbrowser控件怎么获得网页中table的行数?

  1. Q
    webbrowser控件怎么获得网页中table的行数?
    <table width="200" border="1">
      <tr> 
        <td>第一行1 </td> 
        <td>第一行2 </td> 
      </tr> 
      <tr> 
        <td>第二行1 </td> 
        <td>第二行2 </td> 
      </tr> 
    </table>
  2. A
    打错了,应该是:
    msgbox webbrowser1.document.getElementsByTagName("table")(0).rows.length