我應該創建一個主從表單,我必須直接在系結到資料庫的 datagridview 上添加詳細資訊。所以我有一個包含兩個表的表格:intrari(主)和intrari_detaliu(詳細)。當我使用系結導航器在作為父表的 table intrari中選擇一行時,我也在 table intrari_detaliu中獲得了相應的詳細資訊。我使用文本框/組合框在表格內部添加值。那么如何將值直接插入資料網格視圖?

你給查詢 GOOD NAMES,而不僅僅是 Fill - 有一天你會有很多查詢,不要做 Fill、Fill1、Fill2。現在很好地命名它們:

在您的子表配接器中,您提供了一個按父 ID 進行查找的查詢:

或者你做一個查詢來查找你剛剛進行父查詢的同一事物的孩子,比如這里的 CarName:

或者你可以同時做/更多/隨便。每個 TA 可以有很多查詢:

要將網格拖到表單上,請將它們拖出資料源(查看選單,其他視窗)。這將為您完成所有資料系結設定;如果您想手動復制它,您可以檢查 Visual Studio 是如何完成的;父網格通過系結源系結到資料集中的表。子網格通過系結源系結到父系結源上的資料關系

要獲得相關的資料行為,您將 CHILD NODE Clowns,而不是頂級 Clowns 拖出資料源
在您的代碼中,要使用資料填充網格,您實際上只是填充表格;網格將自行更新。您必須先填寫父項,然后是子項。您可以使用根據父條件(例如 my ...ByCarName)選擇大量子項的查詢來填充子項,
this.carsTableAdapter.FillByCarName(this.dataSet1.Cars, "Billy"); //fill parent first
this.clownsTableAdapter.FillByCarName(this.dataSet1.Clowns, "Billy"); //then fill the children by the same
或者您可以在填充后列舉父級,并通過父級 ID 填充子級(就像我的...ByCarId那樣):
this.carsTableAdapter.FillByCarName(this.dataSet1.Cars, "Billy"); //fill parent first
clownsTableAdapter.ClearBeforeFill = false; //turn this off otherwise every call to FillBy.. erases the previous rows
foreach (var r in this.dataSet1.Cars) //for each parent
clownsTableAdapter.FillByCarId(this.dataSet1.Clowns, r.CarId); //fill the children

保存
拖動網格是這樣寫的:
this.Validate();
this.carsBindingSource.EndEdit();
this.tableAdapterManager.UpdateAll(this.dataSet1);
添加一行:
this.Validate();
this.carsBindingSource.EndEdit();
this.clownsBindingSource.EndEdit();
this.tableAdapterManager.UpdateAll(this.dataSet1);
這就是您需要做的一切;單擊運行該代碼的按鈕;tableadapter 管理器保存您對資料集所做的任何更改,例如通過在網格底部寫入來添加新行...

..或者如果你在代碼中做到了:

不管它是如何到達那里的,它是一個新的行,帶有已添加的 RowState
當tableadaptermanager.UpdateAll被呼叫時,或者如果您呼叫個人tableadapter.Update:
carsTableAdapter.Update(this.dataset1.Cars); //update doesn't just UPDATE, it runs INSERT and DELETE too
然后保存您在本地所做的更改。如果其他人在您編輯資料時更改了資料,并且您打開了樂觀并發(參見上面螢屏截圖中的“重繪 ..”),那么您在保存時會遇到例外。您可以選擇要執行的操作并撰寫覆寫新資料、合并或丟棄更改的代碼;詢問用戶他們想做什么
請注意,如果資料庫正在計算您的父 ID 值和子 ID 值,請右鍵單擊資料表之間的關系行,并確保將 Update 設定為級聯:

這樣,當您添加一輛新車和兩個新的相關小丑時,汽車的 ID 為 -1(由資料集本地生成,預先保存),并且小丑也使用它:

然后當資料庫計算真實 ID 和“重繪 資料集”選項時......

... 導致新 ID 被檢索:

然后將父項中的 CarId -1 更改為例如 15(DB 計算的值)會導致子 Clowns 的 CarIds 也自動更新,因此保留了關系

TableAdapter.Update將節省各種變化;編輯、洗掉和插入(新行)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/480220.html
