2010-03-25 93 views
1
SELECT  WO_BreakerRail.ID, indRailType.RailType, indRailType.RailCode, WO_BreakerRail.CreatedPieces, WO_BreakerRail.OutsideSource, WO_BreakerRail.Charged, 
         WO_BreakerRail.Rejected, WO_BreakerRail.RejectedToCrop, COALESCE (WO_BreakerRail.Date, @date) AS Date 
FROM   indRailType LEFT OUTER JOIN 
         WO_BreakerRail ON indRailType.RailCode = WO_BreakerRail.RailCode AND WO_BreakerRail.Date = @date 

我有一個綁定到表適配器的DataGridView。這是我用來填充適配器的選擇查詢。在沒有來自WO_BreakerRail的匹配條目的情況下,ID列將變爲空。當我更新包含數據的行時,update命令正常工作。但是如果我更新了一個在WO_BreakerRail中沒有匹配信息的行,它會失敗,因爲表適配器認爲它應該更新,因爲我修改了它的行集合中的行,但WO_BreakerRail沒有該行。當ID爲空而不是更新命令時,有沒有辦法告訴表適配器使用插入命令?C#TableAdapter.Update()使用UPDATE而不是INSERT

+0

經過進一步調查,將檢查每一行ID = NULL,然後使用Row.SetAdded()是一個可行的解決方案,還是有一個複選框,我缺少的TableAdapter的地方? – Wesley 2010-03-25 15:55:13

回答

2

對於沒有數據的行,請將行狀態設置爲新的 調用:dataRow.SetAdded()

+0

我試過了,但我得到了一個InvalidOperationException。看來,SetAdded不能在DataRowState上調用,DataRowState不會改變。 – 2011-09-12 13:47:56

+0

我不確定它是否是正確的方式,但是我在dataRow.SetAdded()之前調用dataRow.AcceptChanges(),因此RowState在設置爲Added之前設置爲Unchanged。這樣我不再會得到一個InvalidOperationException。 – 2011-09-12 14:16:30

0

我認爲以下是您在添加方法中缺少的內容。

// ... in your method where your inserting 
     DataRow row = MyDataTable.NewRow(); 
     // .... add data to row .... 
     MyDataTable.Rows.Add(row);