当前位置:编程学习 > C#/ASP.NET >>

DataSet查询出来一些数据,如何对DataSet的数据进行一次相当于在查询的过虑操作

我DataSet查询出来一些数据,我现在想对DataSet的数据进行一次相当于在查询的操作,该怎么做?
比如:这是DataSet中的数据
Name Sex  Age
张   女   20
李   男   21
王   女   22
张1  女   20
李1  男   23
王1  女   22
我现在想做的比如模糊查询姓张的、年龄为20的、性别为男的,当然我只是举个例子,但是差不多就这个意思了。


--------------------编程问答-------------------- DataSet.Tables[0].Select("条件"); --------------------编程问答-------------------- DataSet.Tables[0].Select("条件");
------------------
条件如何写,举个例子? --------------------编程问答-------------------- up --------------------编程问答-------------------- DataSet.Tables[0].Select(" Age = 20");
--------------------编程问答-------------------- DataSet.Tables[0].Select(" Age = 20");
-----------
不行 --------------------编程问答-------------------- 怎么可能会不行.提示什么错误了


模糊查询
DataSet.Tables[0].Select("name like %'张'% "); --------------------编程问答-------------------- 查询后的是个DataRow[] --------------------编程问答-------------------- 查询后的是个DataRow[]
-----------
我还要他是 dataset 的啊 --------------------编程问答-------------------- datarow对象为引用传递,修改了DataRow也就相应的修改了DataSet.. --------------------编程问答-------------------- 为什么不在数据库中操作呢? --------------------编程问答-------------------- DataSet.Tables[0].Select("name like %'张'%  and Age = 20");
--------------------编程问答-------------------- using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication3
{
    public partial class Form1 : Form
    {
        private string m_genderTemp;
        private System.Data.DataSet m_dataSetNew;
        private System.Data.DataSet m_dataSetRaw;

        public Form1()
        {
            InitializeComponent();
            InitialRawDataSet();
            GetNewDataSet();
        }

        /// <summary>
        /// initial the raw data
        /// </summary>
        private void InitialRawDataSet()
        {
            m_dataSetNew = m_dataSetRaw.Copy();
            for (int i = 0; i < 10; i++)
            {
                m_genderTemp = (i % 2 )> 0 ? "男" : "女";
                DataRow dataRowTemp = m_dataSetRaw.Tables[0].NewRow();
                dataRowTemp.ItemArray = new object[] { "王"+i, m_genderTemp,(new Random(i).Next()%80)};
                m_dataSetRaw.Tables[0].Rows.Add(dataRowTemp);
                m_dataGridViewRawData.DataSource = m_dataSetRaw.Tables[0];
            }
        }

        /// <summary>
        /// get the selected data 
        /// </summary>
        private void GetNewDataSet()
        {
            string strFilter = "age > 60 or gender = '男'";
            DataRow [] newDataRow = m_dataSetRaw.Tables[0].Select(strFilter);
            foreach(DataRow tempRow in newDataRow)
            {
                m_dataSetNew.Tables[0].Rows.Add(tempRow.ItemArray);
            }
            m_dataGridViewNewData.DataSource = m_dataSetNew.Tables[0];
        }
        
    }
} --------------------编程问答-------------------- namespace WindowsApplication3
{
    partial class Form1
    {
        private System.ComponentModel.IContainer components = null;

        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows desinger generated code

        private void InitializeComponent()
        {
            this.m_dataSetRaw = new System.Data.DataSet();
            this.m_dataTable = new System.Data.DataTable();
            this.m_name = new System.Data.DataColumn();
            this.m_gender = new System.Data.DataColumn();
            this.m_age = new System.Data.DataColumn();
            this.m_dataGridViewRawData = new System.Windows.Forms.DataGridView();
            this.m_dataGridViewNewData = new System.Windows.Forms.DataGridView();
            ((System.ComponentModel.ISupportInitialize)(this.m_dataSetRaw)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.m_dataTable)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.m_dataGridViewRawData)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.m_dataGridViewNewData)).BeginInit();
            this.SuspendLayout();
            // 
            // m_dataSetRaw
            // 
            this.m_dataSetRaw.DataSetName = "DataSetTest";
            this.m_dataSetRaw.Tables.AddRange(new System.Data.DataTable[] {
            this.m_dataTable});
            // 
            // m_dataTable
            // 
            this.m_dataTable.Columns.AddRange(new System.Data.DataColumn[] {
            this.m_name,
            this.m_gender,
            this.m_age});
            this.m_dataTable.TableName = "m_tableName";
            // 
            // m_name
            // 
            this.m_name.ColumnName = "Name";
            // 
            // m_gender
            // 
            this.m_gender.ColumnName = "gender";
            // 
            // m_age
            // 
            this.m_age.ColumnName = "age";
            this.m_age.DataType = typeof(int);
            // 
            // m_dataGridViewRawData
            // 
            this.m_dataGridViewRawData.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
            this.m_dataGridViewRawData.Location = new System.Drawing.Point(12, 34);
            this.m_dataGridViewRawData.Name = "m_dataGridViewRawData";
            this.m_dataGridViewRawData.RowTemplate.Height = 23;
            this.m_dataGridViewRawData.Size = new System.Drawing.Size(347, 155);
            this.m_dataGridViewRawData.TabIndex = 0;
            // 
            // m_dataGridViewNewData
            // 
            this.m_dataGridViewNewData.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
            this.m_dataGridViewNewData.Location = new System.Drawing.Point(12, 209);
            this.m_dataGridViewNewData.Name = "m_dataGridViewNewData";
            this.m_dataGridViewNewData.RowTemplate.Height = 23;
            this.m_dataGridViewNewData.Size = new System.Drawing.Size(347, 152);
            this.m_dataGridViewNewData.TabIndex = 1;
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(371, 386);
            this.Controls.Add(this.m_dataGridViewNewData);
            this.Controls.Add(this.m_dataGridViewRawData);
            this.Name = "Form1";
            this.Text = "Form1";
            ((System.ComponentModel.ISupportInitialize)(this.m_dataSetRaw)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.m_dataTable)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.m_dataGridViewRawData)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.m_dataGridViewNewData)).EndInit();
            this.ResumeLayout(false);

        }

        #endregion

   
        private System.Data.DataTable m_dataTable;
        private System.Data.DataColumn m_name;
        private System.Data.DataColumn m_gender;
        private System.Data.DataColumn m_age;
        private System.Windows.Forms.DataGridView m_dataGridViewRawData;
        private System.Windows.Forms.DataGridView m_dataGridViewNewData;
    }
}

--------------------编程问答-------------------- 楼上写了一堆蝌蚪文也有解决问题啊!呵呵!
一种就是Select方法,一种就是自己写个Foreach循环语句,处理一下。 --------------------编程问答-------------------- 用DataView
DataView dv = DataSet.Tables[0].DefaultView;
 dv.RowFilter = "age=20";
DataGrid1.DataSource=dv;
DataGrid1.DataBind(); --------------------编程问答-------------------- DataView

值得注意的是:DataView只是一个视图,所以其过滤掉的数据只是不显示出来而已。因此,如果

认为当前的数据集只剩过滤出来的数据,然后企图用此数据源来更新原始数据库会出现问题。 --------------------编程问答-------------------- 使用DataView过滤 --------------------编程问答-------------------- ls正解 --------------------编程问答-------------------- 提一个方法,
private void bindData(string ls_where)
{
   string sql = "select * from aaa where 1 =1";
   OleDbCommand select = new OleDbCommand(sql + ls_where, myconnection)
   //绑定....略
}
每次查询的时候重新绑定一下..带上where语句.. --------------------编程问答-------------------- DataSet.Table["表名"].Select("name like %'张'%  AND Age = 20 AND Sex = 男" --------------------编程问答-------------------- mark --------------------编程问答-------------------- DataSet dsTemp = new DataSet();
dsTemp.Merge(DataSet.Table["表名"].Select("name like %'张'%  AND Age = 20 AND Sex = 男"))


--------------------编程问答-------------------- 目的是先DataRow[]再并到DataSet --------------------编程问答-------------------- DataSet.Table["表名"].Select("name like %'张'%  AND Age = 20 AND Sex = 男"
--------------------编程问答-------------------- 好东西 --------------------编程问答-------------------- DataView过滤DataView.RowFilter --------------------编程问答--------------------
引用 22 楼 fengyeit 的回复:
DataSet   dsTemp   =   new   DataSet();
dsTemp.Merge(DataSet.Table[ "表名 "].Select( "name   like   % '张 '%     AND   Age   =   20   AND   Sex   =   男 "))


这位大哥的正解, --------------------编程问答-------------------- 利用dateset表 筛选就可以了 --------------------编程问答-------------------- 学习。还没有用过dataset查询 --------------------编程问答-------------------- 干脆彻底的做法,将填充到dataset的sql语句加上where条件,再重新填充一次,虽是麻烦点,但觉得比较清爽彻底 --------------------编程问答-------------------- 直接一步出来不就得了
--------------------编程问答-------------------- 合理的做法是先将查询结果建立视图,在视图中再次查询。 --------------------编程问答--------------------
引用 30 楼 jocli 的回复:
干脆彻底的做法,将填充到dataset的sql语句加上where条件,再重新填充一次,虽是麻烦点,但觉得比较清爽彻底


up
--------------------编程问答-------------------- dataSet.tables[0].select('條件')
直接查詢此方法的使用,MSDN上有 --------------------编程问答-------------------- DataSet.Table[ "表名 "].Select( "name   like   % '张 '%     AND   Age   =   20   AND   Sex   =   男 ") --------------------编程问答-------------------- 楼上的都回答的很好,帮你顶下 --------------------编程问答--------------------
引用 19 楼 bbbbbb888888 的回复:
提一个方法,
private   void   bindData(string   ls_where)
{
      string   sql   =   "select   *   from   aaa   where   1   =1 ";
      OleDbCommand   select   =   new   OleDbCommand(sql   +   ls_where,……


楼主的意思是,不去进行数据库交互,所以才想要直接通过DATASET来查询,否则就没必要了,而我想问一下:
如果我用的是GRIDVIEW而不是DATAVIEW的话15楼的绑定是否可用?如果不可用的话需要怎么做?
如果我想顺便更新数据的话该怎么做?如果可以的话写一个例子更合适

在下新手,大家多指教了
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,