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                           );
  • 相关阅读:
    Redis 的安装
    oracle表分区
    HashMap、HashTable、LinkedHashMap和TreeMap用法和区别
    HashMap和LinkedHashMap区别
    SpringMVC MultiActionController 默认方法名解析器
    静态资源无法访问问题
    JMeter-简单控制器
    JMeter-随机顺序控制器
    JMeter-随机控制器
    JMeter-交替控制器
  • 原文地址:https://www.cnblogs.com/wanghafan/p/2487635.html
Copyright © 2011-2022 走看看