背景:datadridView啟用洗掉
功能:選中行,按Delete按鍵,執行資料庫的洗掉操作,洗掉成功后重新系結資料源。
情況描述:1、當資料庫有多條資料(超過兩條),洗掉第一條的時候,經過單步跟蹤,執行程序沒問題,系結資料源的時候資料也是沒問題的,但是顯示出來的結果是被洗掉的下面一條也未顯示(系結資料源的時候是有這一條的),此事,若點擊一下查詢或者首頁、尾頁(查詢條件為空,即為查詢所有未洗掉的資料,只有一頁),點擊后,資料顯示就正常了。
2、在問題1的基礎上,第一次洗掉一行,資料源經過跟蹤是去掉了一行,到了顯示的時候丟了兩行,再次選中一行,洗掉,功能正常,丟失所洗掉的那一行。
3、當資料只有一行的時候,程式代碼都執行完畢了,資料源也是正常的,為空串列,但是當我的代碼都執行完畢后,F5跳出代碼,在program.cs執行視窗的時候報了一個超出索引的例外,若忽略此例外,按F5跳過,界面顯示正常。
以上就是此問題的大概描述,配合代碼截圖,望大神幫忙找找哪里的問題,萬分感謝!好人一生平安。





uj5u.com熱心網友回復:
應該是建構式或者load事件有問題uj5u.com熱心網友回復:
可以遠程幫你除錯uj5u.com熱心網友回復:
在你的方法里面寫tryuj5u.com熱心網友回復:
我企鵝號839789221,方便的話,加我一下,謝謝了uj5u.com熱心網友回復:
我單步跟蹤,我所有代碼未拋出例外,資料在我看來,系結資料源是沒有問題的,但是就是不知道問題出在哪uj5u.com熱心網友回復:

你刪除你的分頁代碼,直接綁定dt,是不是不會拋出異常了
uj5u.com熱心網友回復:
你下載一個TeamViweer遠程控制,然后告訴我連接資訊
uj5u.com熱心網友回復:
你刪除你的分頁代碼,直接綁定dt,是不是不會拋出異常了
uj5u.com熱心網友回復:
我企鵝號839789221,方便的話,加我一下,謝謝了 可以遠程幫你除錯
你下載一個TeamViweer遠程控制,然后告訴我連接資訊
密碼7805
uj5u.com熱心網友回復:
你的是最新版本嗎?uj5u.com熱心網友回復:
你的是最新版本嗎?
uj5u.com熱心網友回復:
531325678 密碼85qq6b 你的是最新版本嗎?
密碼是錯誤的
uj5u.com熱心網友回復:
你拍照上傳圖給我看uj5u.com熱心網友回復:
你拍照上傳圖給我看
uj5u.com熱心網友回復:
怎么洗掉
uj5u.com熱心網友回復:
怎么洗掉
uj5u.com熱心網友回復:
資料庫安裝好啦?uj5u.com熱心網友回復:
資料庫安裝好啦?
uj5u.com熱心網友回復:
我電腦上就有 資料庫安裝好啦?
那待會看下
uj5u.com熱心網友回復:
我電腦上就有 資料庫安裝好啦?
那待會看下
uj5u.com熱心網友回復:
我電腦上就有 資料庫安裝好啦?
那待會看下
uj5u.com熱心網友回復:
超出索引,一般就是下標超過了陣列長度。這種,你斷點除錯,就知道具體錯誤行了。
你洗掉后,肯定某個下標有問題。
或者說你在for回圈中,導致的。
uj5u.com熱心網友回復:
超出索引,一般就是下標超過了陣列長度。
這種,你斷點除錯,就知道具體錯誤行了。
你洗掉后,肯定某個下標有問題。
或者說你在for回圈中,導致的。
uj5u.com熱心網友回復:
我寫了另外一段代碼,這次不多行洗掉了,只洗掉一行,同時把洗掉代碼寫到CellContentDoubleClick事件中,取哪一行記錄的主鍵時,用的是 ds.Tables[0].Rows[e.RowIndex]["Id"],這么刪就沒有問題,但是我使用UserDeletingRow事件時候,取出所選行的id,用的是這種方式取的: string id = "(";for (int i = 0; i < dataview1.SelectedRows.Count; i++)
{
id += (dataview1.SelectedRows[i].DataBoundItem as DataRowView)["Id"].ToString() + ",";
}
id = id.TrimEnd(',') + ")";
這兩種方式我拼出來的where條件都是Id in (1)
但是第一種方法功能就正常,第二種就出現我上述描述的問題了。單步跟蹤,第二種方法sql陳述句是沒有問題的,執行完畢后,資料庫里的資料也是沒問題的,重新系結資料,從資料庫取來的資料也是沒問題的,取出來之后重新系結資料源,系結后,監視view的DataSource也是沒問題的,到了前臺就顯示的少一條資料了,這時候,再執行隨便一個方法,到后臺第一個方法的第一行代碼加斷點,這時候在監視view的DataSource,就少了哪一行了。不知道是哪里出現了問題
uj5u.com熱心網友回復:

區別就在這,其它代碼完全一樣
uj5u.com熱心網友回復:
我寫的代碼始終就沒拋例外,這么跟你說吧,洗掉一條資料后,回傳到頁面前系結資料源時候單步跟蹤datatable是三條資料,顯示到前臺就兩條了 超出索引,一般就是下標超過了陣列長度。
這種,你斷點除錯,就知道具體錯誤行了。
你洗掉后,肯定某個下標有問題。
或者說你在for回圈中,導致的。
那就很明顯,問題在于 dgv的 source 和 datatable不同步了。
uj5u.com熱心網友回復:
聯系我,我給你檔案uj5u.com熱心網友回復:
打開TV
uj5u.com熱心網友回復:
打開TV
uj5u.com熱心網友回復:
我寫的代碼始終就沒拋例外,這么跟你說吧,洗掉一條資料后,回傳到頁面前系結資料源時候單步跟蹤datatable是三條資料,顯示到前臺就兩條了 超出索引,一般就是下標超過了陣列長度。
這種,你斷點除錯,就知道具體錯誤行了。
你洗掉后,肯定某個下標有問題。
或者說你在for回圈中,導致的。
那就很明顯,問題在于 dgv的 source 和 datatable不同步了。
uj5u.com熱心網友回復:
打開TV
uj5u.com熱心網友回復:
密碼無效
uj5u.com熱心網友回復:
密碼無效
uj5u.com熱心網友回復:
現在代碼已經精簡到不能精簡了,問題依然存在,哪位大神幫忙找找是哪里的原因,代碼貼圖

uj5u.com熱心網友回復:
應該洗掉的時候時候,在查詢出來的原資料不一樣!uj5u.com熱心網友回復:
你這樣增刪改 效率很低,你應該去網上看一些資料庫增刪改的實體,應該查出資料顯示到datadridView,然后增刪改,分別去操作datadridView和資料庫,并且業務分開。uj5u.com熱心網友回復:
你這樣增刪改 效率很低,你應該去網上看一些資料庫增刪改的實體,應該查出資料顯示到datadridView,然后增刪改,分別去操作datadridView和資料庫,并且業務分開。
uj5u.com熱心網友回復:
應該洗掉的時候時候,在查詢出來的原資料不一樣!
uj5u.com熱心網友回復:
有個東西叫bingsource,如果要操作datagridview,請盡量用這個東西做過渡。--
datagridview靠不住,只能用來顯示一下。
uj5u.com熱心網友回復:
有個東西叫bingsource,如果要操作datagridview,請盡量用這個東西做過渡。
--
datagridview靠不住,只能用來顯示一下。
uj5u.com熱心網友回復:
在你的方法里面寫try試試uj5u.com熱心網友回復:
樓主解決好了嗎uj5u.com熱心網友回復:
樓主解決好了嗎
uj5u.com熱心網友回復:
樓主解決好了嗎
uj5u.com熱心網友回復:
洗掉后,可能需要執行資料庫的pack或者flush操作。uj5u.com熱心網友回復:
看代碼在回圈要呼叫dataview1.SelectedRows.Count
在洗掉操作的程序中,
這個值可能是會變化的
類似于在foreach中進行delete,肯定會出問題
在回圈之前把這個值保存到其他變數中
uj5u.com熱心網友回復:
看代碼
在回圈要呼叫dataview1.SelectedRows.Count
在洗掉操作的程序中,
這個值可能是會變化的
類似于在foreach中進行delete,肯定會出問題
在回圈之前把這個值保存到其他變數中
uj5u.com熱心網友回復:
洗掉后,可能需要執行資料庫的pack或者flush操作。
uj5u.com熱心網友回復:
我不是給你可以自己注意身體哈uj5u.com熱心網友回復:
在回圈要呼叫dataview1.SelectedRows.Count在洗掉操作的程序中,
這個值可能是會變化的
uj5u.com熱心網友回復:
回圈這個選中行的時候,我并沒有對這個做處理,只是記錄下了哪一行的記錄id,然后從資料庫中洗掉的,最后重新系結資料源,這種方式怎么會變轉載請註明出處,本文鏈接:https://www.uj5u.com/net/82398.html
標籤:C#
