none
4個datagridview連動後,搜尋之後其他datagridvie不會連動 RRS feed

  • 問題

  • 我的form1裡面有4個datagridview
    主要的是datagridview1(客戶資料)
    datagridview2(進貨紀錄)、datagridview3(出貨紀錄)、datagridview4(進出資料)內容會隨著datagridview1選擇不同客戶而改變
    這些在我還沒搜尋之前都是正常顯示的

    datagridview1  datagridview2     datagridview3    datagridview4    
    客戶1       進貨紀錄1       出貨紀錄1       進出紀錄1
    客戶2       進貨紀錄2       出貨紀錄2       進出紀錄2
    客戶3       進貨紀錄3       出貨紀錄3       進出紀錄3
    客戶4       進貨紀錄4       出貨紀錄4       進出紀錄4
    客戶5       進貨紀錄5       出貨紀錄5       進出紀錄5


    但是我搜尋某客戶之後,datagridview2~datagridview4還是會從1開始

    datagridview1  datagridview2     datagridview3    datagridview4    
    客戶3       進貨紀錄1       出貨紀錄1       進出紀錄1
    客戶4       進貨紀錄2       出貨紀錄2       進出紀錄2
    客戶5       進貨紀錄3       出貨紀錄3       進出紀錄3


    可以請各位大大幫我看一下,哪裡寫錯了嗎?
    感激不盡~~~

    public void loaddata3 ()
            {
                cn = new OleDbConnection(cs);
                da1 = new OleDbDataAdapter("select * from 作業畫面_客戶資料", cn);
                da2 = new OleDbDataAdapter("select * from 作業畫面_客戶寄倉", cn);
                da3 = new OleDbDataAdapter("select * from 寄倉_進銷總表2", cn);
                da4 = new OleDbDataAdapter("select * from 作業畫面_客戶寄倉出貨", cn);
                ds = new DataSet();
                da1.Fill(ds, "作業畫面_客戶資料");
                da2.Fill(ds, "作業畫面_客戶寄倉");
                ds.Tables["作業畫面_客戶資料"].Constraints.Add("客戶編號_PK", ds.Tables
                    ["作業畫面_客戶資料"].Columns["客戶編號"],true);
                ds.Relations.Add("作業畫面_客戶資料_作業畫面_客戶寄倉", ds.Tables["作業畫面_客戶資料"].Columns
                    ["客戶編號"],ds.Tables["作業畫面_客戶寄倉"].Columns["寄倉客戶編號"]);
    
                da3.Fill(ds, "寄倉_進銷總表2");
                ds.Relations.Add("作業畫面_客戶資料_寄倉_進銷總表2", ds.Tables["作業畫面_客戶資料"].Columns
                    ["客戶編號"], ds.Tables["寄倉_進銷總表2"].Columns["寄倉客戶編號"]);
    
                da4.Fill(ds, "作業畫面_客戶寄倉出貨");
                ds.Relations.Add("作業畫面_客戶資料_作業畫面_客戶寄倉出貨", ds.Tables["作業畫面_客戶資料"].Columns
                    ["客戶編號"], ds.Tables["作業畫面_客戶寄倉出貨"].Columns["客戶編號"]);
    
                dataGridView1.DataSource = ds.Tables["作業畫面_客戶資料"];
    
                LoadChildData(0);
                LoadChildData2(0);
                LoadChildData3(0);
    
            }
    
    
            private void LoadChildData(int rowIndex)//寄倉紀錄
            {
                var parentRow = ds.Tables["作業畫面_客戶資料"].Rows[rowIndex];
                var childRows = parentRow.GetChildRows("作業畫面_客戶資料_作業畫面_客戶寄倉");
                DataTable childTable = ds.Tables["作業畫面_客戶寄倉"].Clone();
                foreach (var row in childRows)
                {
                    childTable.ImportRow(row);
                }
                dataGridView2.DataSource = childTable;
            }
    
            private void LoadChildData2 (int rowIndex)//進銷總表
            {
                var parentRow = ds.Tables["作業畫面_客戶資料"].Rows[rowIndex];
                var childRows = parentRow.GetChildRows("作業畫面_客戶資料_寄倉_進銷總表2");
                DataTable childTable = ds.Tables["寄倉_進銷總表2"].Clone();
                foreach (var row in childRows)
                {
                    childTable.ImportRow(row);
                }
                dataGridView3.DataSource = childTable;
            }
    
            private void LoadChildData3(int rowIndex)//出貨紀錄
            {
                var parentRow = ds.Tables["作業畫面_客戶資料"].Rows[rowIndex];
                var childRows = parentRow.GetChildRows("作業畫面_客戶資料_作業畫面_客戶寄倉出貨");
                DataTable childTable = ds.Tables["作業畫面_客戶寄倉出貨"].Clone();
                foreach (var row in childRows)
                {
                    childTable.ImportRow(row);
                }
                dataGridView4.DataSource = childTable;
            }
    
    
    private void dataGridView1_SelectionChanged(object sender, EventArgs e)
            {
                
                DataGridViewCell cell = null;
                foreach(DataGridViewCell selectedCell in dataGridView1.SelectedCells) 
                {
                    cell = selectedCell;
                    break;
                }
                if (cell!=null)
                {
                    DataGridViewRow row = cell.OwningRow; ;
                    textBox1.Text = row.Cells[0].Value.ToString();
                    textBox2.Text = row.Cells[1].Value.ToString();
                    textBox3.Text = row.Cells[2].Value.ToString();
                    textBox4.Text = row.Cells[3].Value.ToString();
                    textBox5.Text = row.Cells[4].Value.ToString();
                    textBox6.Text = row.Cells[5].Value.ToString();
                    textBox8.Text = row.Cells[6].Value.ToString();
                    textBox9.Text = row.Cells[7].Value.ToString();
                    textBox16.Text = row.Cells[8].Value.ToString();
                    textBox17.Text = row.Cells[9].Value.ToString();
                    textBox13.Text = row.Cells[10].Value.ToString();
                    textBox14.Text = row.Cells[11].Value.ToString();
                    textBox7.Text = row.Cells[12].Value.ToString();
                    textBox11.Text = row.Cells[13].Value.ToString();
                    textBox10.Text = row.Cells[14].Value.ToString();
                    textBox12.Text = row.Cells[15].Value.ToString();
                    richTextBox1.Text = row.Cells[16].Value.ToString();
                }
    
                LoadChildData(dataGridView1.CurrentRow.Index);
                LoadChildData2(dataGridView1.CurrentRow.Index);
                LoadChildData3(dataGridView1.CurrentRow.Index);
    
            }
    
    
     private void textBox21_TextChanged(object sender, EventArgs e) //搜尋客戶名稱
            {
    
                conn = new OleDbConnection(strcon);
                conn.Open();
                OleDbCommand objcmd = new OleDbCommand("SELECT * FROM 作業畫面_客戶資料 where 客戶名稱 LIKE '%" + textBox21.Text + "%'", conn);
                OleDbDataAdapter adp = new OleDbDataAdapter(objcmd);
                DataTable dt = new DataTable();
                adp.Fill(dt);
                dataGridView1.DataSource = dt;
    
            }

    2017年10月12日 上午 06:02

所有回覆

  • Hi Krytabo,

    可以提供幾個偵錯的方法給您參考,

    您可以設立 中斷點 來查看目前傳值的數字是不是正確的,

    可能你的程式 function再呼叫時,值沒有傳到,

    或是中途被重置了,

    導致您的輸出結果都是從第一個值開始,

    希望能幫助到您:)


    請記得將對您有幫助的回覆"標示為解答"以幫助其他尋找解答及參與社群討論的朋友們。

     

    Please remember to click Mark as Answer on the post that helps you.
    This can be beneficial to other community members reading the thread.

    2017年10月13日 上午 02:53
  • 我有試過用中斷點,但是我...看不懂哪裡出了問題

    只知道他搜尋出來的值是對的,但是搜尋出來的值跟我的LoadChildData系列似乎對不到了

    沒有任何錯誤訊息,讓我不知道該從何下手

    2017年10月13日 上午 07:21
  • 您的程式中是使用GetChildRows取得相關的記錄, 所以要檢查一下DataSet中的DataTable是否建立有DataRelation?
    2017年10月13日 下午 11:08