none
使用windows form 關於從SQL資料的篩選 dataset該怎麼設定? RRS feed

  • 問題

  • 我有三個SQL的資料表
    學生資料-->Student(S_id,S_name,進入學年,班級,系級,tag,S_pw)
    課程資料-->Class(C_id,C_name,T_id,Semester_id)
    StudesClass(CS_id,S_id,C_id)

    在設計介面我拉了這三個
    ComboBox
    Button
    DataGridView

    ComboBox用來顯示Class資料表的C_name
    Button   在按下按鈕之後篩選出我想要的欄位資料(S_id S_name 班級 系級)
    DataGridView  用來顯示篩選後我想要的欄位資料(S_id S_name 班級 系級)


    我是使用Dataset,但是studentBindingSource.Filter = "";裡頭篩選的條件若是有寫道Student資料表以外的欄位,他會出現找不到的訊息。

     

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    namespace test
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }

            private void Form1_Load(object sender, EventArgs e)
            {
                // TODO: 這行程式碼會將資料載入 'rFIDDataSet1.Class' 資料表。您可以視需要進行移動或移除。
                this.classTableAdapter.Fill(this.rFIDDataSet1.Class);
               
            }

            private void button1_Click(object sender, EventArgs e)
            {
                // TODO: 這行程式碼會將資料載入 'rFIDDataSet.Student' 資料表。您可以視需要進行移動或移除。

                this.studentTableAdapter.Fill(this.rFIDDataSet.Student);
                studentBindingSource.Filter = "";
            }

            private void sutdentBindingSource_CurrentChanged(object sender, EventArgs e)
            {
               
            }
        }
    }


    是因為在一開始dataset就出錯誤了嗎?

    我是要找有修這堂課的學生

    • 已編輯 林零零 2009年11月18日 下午 05:26
    2009年11月18日 下午 03:43

解答

所有回覆

  • hi
    建議先看看
    HOW TO:將資料繫結至 Windows Form DataGridView 控制項
    http://msdn.microsoft.com/zh-tw/library/fbk67b6z.aspx



    sample code
    Add, Edit, and Delete in DataGridView with Paging
    http://www.codeproject.com/KB/grid/DataGridView_manipulation.aspx
    http://www.dotblogs.com.tw/ricochen/Default.aspx
    2009年11月18日 下午 04:04
  • 我也有用到BindingSource
    可是還是不行
    可以顯示資料
    可是卻不是我想篩選出來的資料

    2009年11月18日 下午 04:10
  • 參考HOW TO:使用 Windows Form BindingSource 元件排序和篩選 ADO.NET 資料
    http://msdn.microsoft.com/zh-tw/library/ya3sah92.aspx

    如果bindingsource的datasource含一個以上的清單或資料表,必須設定datamember屬性以便指定要繫結那一個清單或資料表

    BindingSource..::.DataMember 屬性
    http://msdn.microsoft.com/zh-tw/library/system.windows.forms.bindingsource.datamember.aspx
    http://www.dotblogs.com.tw/ricochen/Default.aspx
    • 已標示為解答 Lolota Lee 2009年11月25日 上午 06:04
    2009年11月18日 下午 11:46
  • 謝謝
    我已經可以篩選了
    但是我現在只能用ListBox來顯示篩選完的資料
    若我想用DataGirdView來顯示篩選完的資料的話 該怎麼改?
    這是我可以用ListBox顯示的程式碼
     
    private void Form1_Load(object sender, EventArgs e)
            {
                GetClass();
            }

            private void GetClass()
            {
                studesClassTableAdapter1.Fill(rfidDataSet1.StudesClass);
                studentTableAdapter1.Fill(rfidDataSet1.Student);
                classTableAdapter1.Fill(rfidDataSet1.Class);

                foreach (DataRow drClass in rfidDataSet1.Class)
                {
                    classname.Items.Add(drClass["C_name"].ToString());
                }
            }

            private void classname_SelectedIndexChanged(object sender, EventArgs e)
            {
                int intIdx = this.classname.SelectedIndex;
                DataRow drClass = rfidDataSet1.Class[intIdx];
                studentdata.Items.Clear();
                DataRow drStudent = null;
                foreach (DataRow drStudesClass in drClass.GetChildRows("FKClassStudesClass"))
                {
                    drStudent = drStudesClass.GetParentRow("FKStudentStudesClass");
                    studentdata.Items.Add(drStudent["S_id"].ToString() + "\t"
                                        + drStudent["S_name"].ToString() + "\t"
                                        + drStudent["班級"].ToString() + "\t"
                                        + drStudent["系級"].ToString());
                }
            }

    2009年11月23日 下午 01:07
  • 將你篩選出來的資料組成DataTable
    dataGridView1.DataSource=DataTable


    sample
    DataTable dt = new DataTable("mytable");
                dt.Columns.Add("c1");
                dt.Columns.Add("c2");
                for (int i = 1; i <= 10; i++)
                {
                    Random rnd = new Random();
                    DataRow row = dt.NewRow();
                    row["c1"] = "A" + i.ToString();
                    row["c2"] = rnd.Next(1, 100);
                    dt.Rows.Add(row);
                }
                dataGridView1.DataSource = dt;
    http://www.dotblogs.com.tw/ricochen/Default.aspx
    2009年11月23日 下午 02:00