zoukankan      html  css  js  c++  java
  • DataTable

    [一篮饭特稀原创,转载请注明出处http://www.cnblogs.com/wanghafan/archive/2012/05/07/2487635.html]

    删除行

    View Code
    1     protected void deleteDataRow(int RowID,DataTable dt)
    2     {
    3         for (int i = dt.Rows.Count - 1; i >= 0; i--)
    4         {
    5             if (Convert.ToInt32(dt.Rows[i]["RowID"]) == RowID)
    6                 dt.Rows.RemoveAt(i);
    7         }
    8     }

     批量删除行

    View Code
     1 DataTable dt = new DataTable(); 
     2 int len = dt.Rows.Count;
     3 for (int i = len; i >=0; i--)
     4 {
     5     if (((CheckBox)Rp.Items[i].FindControl("CB")).Checked)
     6     {
     7          dt.Rows[i].Delete();
     8     }
     9 }
    10 dt.AcceptChanges();     //提交对表进行的修改

    错误 该行已经属于另一个表

    View Code
     1 从一个TABLE中取一行放到另一个TABLE里报错: 该行已经属于另一个表。
     2 DataTable dt = new DataTable();
     3 
     4 dt = ds.Tables[0].Clone(); //克隆结构传递给dt
     5 
     6 DataRow[] dr=dtOld["Product"].Select("ProjectID=1"); //通过条件得到符合条件的行
     7 for(int i=0;i<dr.Length;i++)
     8 {
     9      //将数组元素加入表...
    10      dt.Rows.Add(dr[i]); //出错提示为:该行已经属于另一个表 改成 dt.Rows.Add(dr[i].ItemArray);
    11 }

    对DataTable进行操作后如果赋值给DataSource务必要先AcceptChange

    View Code
    1  比如对DataTable进行排序后,如果直接复制给DataSource,会出现DataTable的所有行状态RowState==DataRowState.Added,使得在保存后不知不觉中出现双份数据导致键值冲突!
    2 
    3    e.g.
    4    DataView dv = dt_KeyWeightQuestionsTEO.DefaultView;
    5    dv.Sort = "ParentID,OwnID";
    6    dt_KeyWeightQuestionsTEO = dv.ToTable();
    7    dt_KeyWeightQuestionsTEO.AcceptChanges();   <----- 关键
    8    treeList.DataSource = dt_KeyWeightQuestionsTEO;

    添加一自增列至首列

    View Code
    1 DataColumn dcIID=new DataColumn("IID", System.Type.GetType("System.Int32"));
    2 dcIID.AutoIncrement = true;
    3 dcIID.AutoIncrementSeed = 1;
    4 dcIID.AutoIncrementStep = 1;
    5 dcIID.ReadOnly = true;
    6 dt.Columns.Add(dcIID);

    利用 栈 实现 多行多次 撤销 Ctrl+Z 

    View Code
      1 using System;
      2 using System.Collections.Generic;
      3 using System.ComponentModel;
      4 using System.Data;
      5 using System.Drawing;
      6 using System.Text;
      7 using System.Windows.Forms;
      8 using DevExpress.Utils.Commands;
      9 
     10 namespace StackProgram
     11 {
     12     public partial class StackProgram : Form
     13     {
     14         private int stackLength = 3; //撤销上限        
     15         Stack<List<DataRow>> st_DataRow = new Stack<List<DataRow>>();  //
     16 
     17         public StackProgram()
     18         {
     19             InitializeComponent();
     20             DataTable dt = new DataTable();
     21             dt.Columns.Add("IID", Type.GetType("System.Int32"));
     22             dt.Columns.Add("IName", Type.GetType("System.String"));
     23             for (int i = 1; i <= 5; i++)
     24             {
     25                 DataRow dr = dt.NewRow();
     26                 dr["IID"] = i;
     27                 dr["IName"] = "Name_"+i;
     28                 dt.Rows.Add(dr);
     29             }
     30             dt.AcceptChanges();
     31             gridControl1.DataSource = dt;
     32         }
     33 
     34         private void gridControl1_KeyDown(object sender, KeyEventArgs e)
     35         {
     36             if (e.Control && e.KeyCode.ToString().Equals("Z") && st_DataRow.Count > 0)
     37             {
     38                 List<DataRow> li_dr = st_DataRow.Pop();
     39                 if (li_dr.Count==1) //添加或修改或删除
     40                 {
     41                     if (li_dr[0].RowState.Equals(DataRowState.Added) || li_dr[0].RowState.Equals(DataRowState.Modified) || li_dr[0].RowState.Equals(DataRowState.Deleted))
     42                     {
     43                         li_dr[0].RejectChanges();
     44                     }
     45                 }
     46                 else //批量删除
     47                 {
     48                     foreach (DataRow dr in li_dr)
     49                     {
     50                         dr.RejectChanges();
     51                     }
     52                 }
     53                 System.Windows.Forms.SendKeys.SendWait("{BS}"); //强制按下退格键可以取消该行的编辑状态!!!               
     54             }
     55         }
     56 
     57         private void gridControl1_EmbeddedNavigator_ButtonClick(object sender, DevExpress.XtraEditors.NavigatorButtonClickEventArgs e)
     58         {
     59             if (e.Button.Hint.Equals("添加"))
     60             {
     61                 gridView1.AddNewRow();
     62                 OverStack();
     63                 List<DataRow> li_dr = new List<DataRow>();
     64                 li_dr.Add(gridView1.GetDataRow(gridView1.FocusedRowHandle));
     65                 st_DataRow.Push(li_dr);
     66             }
     67             if (e.Button.Hint.Equals("删除"))
     68             {
     69                 OverStack();
     70                 List<DataRow> li_dr = new List<DataRow>();
     71                 foreach (int i in gridView1.GetSelectedRows())
     72                 {
     73                     li_dr.Add(gridView1.GetDataRow(i));
     74                 }               
     75                 st_DataRow.Push(li_dr);
     76                 gridView1.DeleteSelectedRows();
     77             }
     78         }
     79 
     80         private void gridView1_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
     81         {
     82             if (!gridView1.GetDataRow(gridView1.FocusedRowHandle).RowState.Equals(DataRowState.Detached)) //新增的行立即修改时不能算作编辑的行
     83             {
     84                 OverStack();
     85                 List<DataRow> li_dr = new List<DataRow>();
     86                 li_dr.Add(gridView1.GetDataRow(gridView1.FocusedRowHandle));
     87                 st_DataRow.Push(li_dr);
     88             }
     89         }
     90         
     91         private void OverStack()
     92         {
     93             if (st_DataRow.Count>0 && st_DataRow.Count >= stackLength) //大于栈空间时,删除栈底元素,更新栈顶元素
     94             {
     95                 List<List<DataRow>> li_li_row = new List<List<DataRow>>();
     96                 foreach (List<DataRow> li_dr in st_DataRow) //复制原有栈元素
     97                 {
     98                     li_li_row.Add(li_dr);
     99                 }
    100                 li_li_row.Reverse(); //反转
    101                 li_li_row.RemoveAt(0); //删除栈底元素
    102                 st_DataRow.Clear(); //清空所有栈元素
    103                 foreach (List<DataRow> li_dr in li_li_row) //重新入栈
    104                 {
    105                     st_DataRow.Push(li_dr);
    106                 }
    107             }
    108         }
    109     }
    110 }

    DataView的RowFilter注入攻击

    View Code
     1  public static string EncodeString(string s) 
     2         { 
     3             StringBuilder sb = new StringBuilder(); 
     4             for (int i = 0; i < s.Length; i++) 
     5             { char c = s[i]; if (c == '*' || c == '%' || c == '[' || c == ']')             
     6                 sb.Append("[").Append(c).Append("]"); else if (c == '\'')            
     7                 sb.Append("''"); else             
     8                 sb.Append(c); } return sb.ToString(); 
     9         } 
    10 
    11    dv.RowFilter = String.Format(
    12                            "名称='{0}' and 规格型号='{1}' and 单价='{2}' and 段ID='{3}'  and 编码='{4}'",
    13                            Global.EncodeString(dr["名称"].ToString().Trim()),
    14                            Global.EncodeString(dr["规格型号"].ToString().Trim()),
    15                            Global.EncodeString(dr["单价"].ToString().Trim()),
    16                            dr["段ID"].ToString().Trim() == string.Empty ? "0" : dr["段ID"].ToString().Trim(),
    17                             Global.EncodeString(dr["编码"].ToString().Trim())
    18                           );
  • 相关阅读:
    How to install VXDIAG Honda, Toyota and JLR SDD software
    16% off MPPS V16 ECU tuning tool for EDC15 EDC16 EDC17
    Cummins INSITE locked and ask for verification code
    How to use BMW Multi Tool 7.3 to replace lost key for BMW X1
    Bleed Brake Master Cylinder with Intelligent Tester IT2
    Porsche Piwis Tester II “No VCI has been detected”,how to do?
    Creader VIII VS. Creader VII+
    How to solve GM MDI cannot complete the installation
    汽车OBD2诊断程序开发 (原文转载,思路很清晰!)
    汽车节温器单片机开发思路
  • 原文地址:https://www.cnblogs.com/wanghafan/p/2487635.html
Copyright © 2011-2022 走看看