我在c#2003中,我的数据库表是这样的啊!
id    ProductID   number  datetime
1        2         21      2007-03-01
2        2         23      2007-04-01
3        2         25      2007-05-01
4        2         43      2007-06-01
5        2         31      2007-03-01
6        3         23      2007-04-01
7        3         56      2007-05-01
8        3         16      2007-06-01
然后显示出来的样子是----------------------------------------------------------------------------------
| 商品名称 | 2007-04 | 2007-05 | 2007-06 | 2007-07 | 2007-08 | 2007-09 | 2007-10 |
----------------------------------------------------------------------------------
|     2    |   23    |    25   |   43    |         |         |         |         |
----------------------------------------------------------------------------------
|     3    |   23    |    56   |   16    |         |         |         |         |
----------------------------------------------------------------------------------
日期是显示从当前月往后依次类推6个月,如果,后面的月份没有输入数据则显示空白
每个显示的数据都是在一个input文本框中的,可以进行保存修改,如果,空白的地方输入数据的话则是新增一条!从数据库中取出数据,我的语句是这样写的
select productid
, sum(case month([datetime]) when dataAdd(getdate(),0)) then number end)
, sum(case month([datetime]) when dataAdd(getdate(),1)) then number end)
, sum(case month([datetime]) when dataAdd(getdate(),2))then number end)
, sum(case month([datetime]) when dataAdd(getdate(),3)) then number end)
, sum(case month([datetime]) when dataAdd(getdate(),4)) then number end)
, sum(case month([datetime]) when dataAdd(getdate(),5)) then number end)
, sum(case month([datetime]) when dataAdd(getdate(),6)) then number end)
from products
group by productid现在问题是,保存的时候该如何解决呢?
因为,有些是原有的,我只要修改就可以拉,但是有些是新增的,该如何判断呢、
同时日期该如何存入,我是按照表头的那个月份,如果对应的是2007-5,则存入数据库的是2007-5-1,依次类推啊,该如何解决呢?
各位高手帮帮忙啊!

解决方案 »

  1.   

    用于从 DataTable 对象中删除 DataRow 对象的方法有两种:DataRowCollection 对象的 Remove 方法和 DataRow 对象的 Delete 方法。Remove 方法从 DataRowCollection 中删除 DataRow,而 Delete 方法只将行标记为删除。当应用程序调用 AcceptChanges 方法时,才会发生实际的删除。通过使用 Delete,您可以在实际删除之前先以编程方式检查哪些行标记为删除。如果将行标记为删除,其 RowState 属性会设置为 Deleted。
      

  2.   

    在将 DataSet 或 DataTable 与 DataAdapter 和关系型数据源一起使用时,用 DataRow 的 Delete 方法移除行。Delete 方法只是在 DataSet 或 DataTable 中将行标记为 Deleted,而不会移除它。而 DataAdapter 在遇到标记为 Deleted 的行时,会执行其 DeleteCommand 方法以在数据源中删除该行。然后,就可以用 AcceptChanges 方法永久移除该行。如果使用 Remove 删除该行,则该行将从表中完全移除,但 DataAdapter 不会在数据源中删除该行。
      

  3.   

    你用的是否SQLServer数据库,你要绑定的后台表应该是一个临时表,所有操作都对临时表进行操作,然后调用后台的存储过程来完成对实际表的数据更新,诚如楼上所说,很简单的,至于你还有什么地方不明白,可以把代码贴出,我来帮你完善。
      

  4.   

    查询语句select productid 
    , isnull(sum(case month([datetime]) when month(getdate()) then number end) ,0) 
    , isnull(sum(case month([datetime]) when month(getdate())+ 1 then number end) , 0) 
    , isnull(sum(case month([datetime]) when month(getdate())+ 2 then number end) , 0)
    , isnull(sum(case month([datetime]) when month(getdate())+ 3 then number end) , 0)
    , isnull(sum(case month([datetime]) when month(getdate())+ 4 then number end) , 0)
    , isnull(sum(case month([datetime]) when month(getdate())+ 5 then number end) , 0)
    , isnull(sum(case month([datetime]) when month(getdate())+ 6 then number end) , 0)
    from products 
    group by productid编辑DataGrid的时候,如果原来为0的则执行插入语句,否则执行更新语句
      

  5.   

    不明白啊!什么问题啊!
    我的想法是,取已经没有问题了!关键是保存!
    页面是已经可以有数据了,
    然后是把页面上的table里的数据先全部数据取出,然后在跟数据库里的数据进行对比啊!就是后面这部我不知道该如何写!
      

  6.   

    也许可以这样:
    在读出数据的时候你的SQL语句改为“select *from products for XML AUTO ,ELEMENTS”
    这样你取出的数据就是XML形式的,然后使用IO进行保存。
    当你修改数据的时候直接操作XML文件将修改的数据保存到临时生成的一个XML文件中。
    修改完成后通过ADO.NET将临时生成的XML文件中的内容读入SQLServer中。
    这样无论你做多少次修改只是进行IO操作速度会比ADO.NET快点。最后将XML文件读入SQLServer的时候你的数据由于是全是修改后的数据所以无需做是否修改的判断可以直接修改(必须有一个主键作为条件,否则就新增数据了),这样还可以解决频繁使用ADO.NET产生的效率问题。
    select *from products for XML AUTO ,ELEMENTS

    select *from products
    这两句SQL语句的效率是相同的。
      

  7.   

    在将 DataSet 或 DataTable 与 DataAdapter 和关系型数据源一起使用时,用 DataRow 的 Delete 方法移除行。Delete 方法只是在 DataSet 或 DataTable 中将行标记为 Deleted,而不会移除它。而 DataAdapter 在遇到标记为 Deleted 的行时,会执行其 DeleteCommand 方法以在数据源中删除该行。然后,就可以用 AcceptChanges 方法永久移除该行。如果使用 Remove 删除该行,则该行将从表中完全移除,但 DataAdapter 不会在数据源中删除该行。
      

  8.   

    关键是保存!
    页面是已经可以有数据了,就是如何把页面上的table里的数据先全部取出,然后在跟数据库里的数据进行对比啊!
    这部分我不知道如何写啊!
    private string SetGrid()

    string CustomerID = "101";
    DataSet ds= COM.LianJing.BusinessEntityLibrary.Purchase.PurchaseReportManagement.GetPuchasePlanList(CustomerID);
    DataTable dataTable = ds.Tables[0];

    System.Text.StringBuilder html = new System.Text.StringBuilder(); foreach (DataRow dataRow in dataTable.Rows)
    {
    html.Append( "<tr>");
    html.Append( "<td noWrap align='left'><input type='checkbox'></td>");
    html.Append( "<td style='DISPLAY: none' noWrap align='left'></td>");
    html.Append( "<td style='DISPLAY: none' noWrap align='left'>"+dataRow["productid"]+"</td>");
    html.Append( "<td style='DISPLAY: none' noWrap align='left'></td>");
    html.Append( "<td style='DISPLAY: none' noWrap align='left'></td>");
    html.Append( "<td>"+dataRow["productclassname"].ToString()+"</td>");
    html.Append( "<td>"+dataRow["productbrand"].ToString()+"</td>");
    html.Append( "<td>"+dataRow["productspec"].ToString()+"</td>");
    html.Append( "<td>"+dataRow["productpack"].ToString()+"</td>");
    html.Append( "<td align=center>"+dataRow["PackUnit"].ToString()+"</td>");
    html.Append( "<td noWrap align=right><input id='Quantity1' class='tablemoneyinput' type='text' size='8' value='"+dataRow["Quantity1"].ToString()+"'></td>");
    html.Append( "<td noWrap align=right><input id='Quantity2' class='tablemoneyinput' type='text' size='8' value='"+dataRow["Quantity2"].ToString()+"'></td>");
    html.Append( "<td noWrap align=right><input id='Quantity3' class='tablemoneyinput' type='text' size='8' value='"+dataRow["Quantity3"].ToString()+"'></td>");
    html.Append( "<td noWrap align=right><input id='Quantity4' class='tablemoneyinput' type='text' size='8' value='"+dataRow["Quantity4"].ToString()+"'></td>");
    html.Append( "<td noWrap align=right><input id='Quantity5' class='tablemoneyinput' type='text' size='8' value='"+dataRow["Quantity5"].ToString()+"'></td>");
    html.Append( "<td noWrap align=right><input id='Quantity6' class='tablemoneyinput' type='text' size='8' value='"+dataRow["Quantity6"].ToString()+"'></td>");
    html.Append( "<td noWrap align=right><input id='Quantity7' class='tablemoneyinput' type='text' size='8' value='"+dataRow["Quantity7"].ToString()+"'></td>");
    html.Append( "<td style='DISPLAY: none' noWrap align='left'></td>");
    html.Append( "</tr>\t\n");
    }
    return html.ToString();
    }
    这是我读出数据库后,显示在页面上的表格的代码,
    现在的问题是就是保存的时候不知道该如何写啊!