| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1905 人关注过本帖
标题:DataGridView在刪除最后一筆記錄時拋出异常
只看楼主 加入收藏
C_B_Lu
Rank: 1
等 级:新手上路
威 望:1
帖 子:453
专家分:0
注 册:2006-1-10
收藏
 问题点数:0 回复次数:7 
DataGridView在刪除最后一筆記錄時拋出异常

我有一個dgv控件﹐它的數据源是一個BindingSource控件(bsPartList)﹐當我刪除最后一行時﹐會拋出异常(如下圖)﹐我跟蹤刪除代碼﹐發現最后一行刪除完成后﹐其dgv.Rows.Count的值為1,而bsPartList.Count的值為0.(但是當表中有多行記錄時﹐刪除完成后﹐這兩個值是一樣的)﹐為會么為這樣子﹖

具体刪除代碼如下﹒
private void tsbDelete_Click(object sender, EventArgs e)
{
if (dgvPartList.Rows.Count == 0)
{
MessageBox.Show("沒有可刪除的記錄!", "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
dgvPartList.Rows[bsPartList.Position].Selected = true;
string strPartID = dgvPartList.CurrentRow.Cells["colPartID"].Value.ToString().Trim();
if (MessageBox.Show("您确定要刪除物料編號為\" " + strPartID + " \"的記錄嗎﹖", "詢問", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
== DialogResult.Yes)
{
SqlCommand cmd = new SqlCommand("Part_Delete", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@partID", SqlDbType.NVarChar, 18);
cmd.Parameters["@partID"].Value = strPartID;
cmd.Parameters.Add("@errorMsg", SqlDbType.NVarChar, 200);
cmd.Parameters["@errorMsg"].Direction = ParameterDirection.Output;
if (conn.State != ConnectionState.Open)
{
conn.Open();
}
try
{
bsPartList.EndEdit();
cmd.ExecuteNonQuery();
bsPartList.RemoveCurrent();
bsPartList.EndEdit();
}
catch
{
string strMsg = cmd.Parameters["@errorMsg"].Value.ToString();
MessageBox.Show(strMsg, "錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
if (conn.State != ConnectionState.Closed)
{
conn.Close();
}
}
}
}

图片附件: 游客没有浏览图片的权限,请 登录注册

搜索更多相关主题的帖子: DataGridView 
2007-08-29 10:36
C_B_Lu
Rank: 1
等 级:新手上路
威 望:1
帖 子:453
专家分:0
注 册:2006-1-10
收藏
得分:0 
但是﹐如果先退出﹐再重新打開表單﹐這里刪除就不會有錯誤差

帮助那些真正需要帮助的人,是对帮助你的人最好的回报!
2007-08-29 11:32
师妃暄
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:805
专家分:107
注 册:2006-3-1
收藏
得分:0 
把你存储过程的语句帖上来

有实力才会有魅力 实力来自坚持不懈的努力
2007-08-29 12:04
C_B_Lu
Rank: 1
等 级:新手上路
威 望:1
帖 子:453
专家分:0
注 册:2006-1-10
收藏
得分:0 
以下是引用师妃暄在2007-8-29 12:04:30的发言:
把你存储过程的语句帖上来

/*
刪除前先驗証該料件是否存在于BOM表中﹐如果存在﹐則不允許刪除
刪除料件的同時﹐將刪除該料件的所有單价信息
*/
CREATE PROCEDURE [Part_Delete]
@partID varchar(18),
@errorMsg varchar(200) OUTPUT
AS
-- 在執行刪除前﹐先檢查要刪除的料號是否存在

IF ( @partID = '' )
BEGIN
SELECT @errorMsg = '沒有可刪除的記錄﹗'
RETURN
END

IF EXISTS ( SELECT 1 FROM [Part] WHERE [PartID] = @partID )
BEGIN
SELECT @errorMsg = '您指定的料號不存在﹗'
RETURN
END

-- 先檢查在Bom表中是否包含該料件的信息,如果存在﹐則不允許刪除
DECLARE @sampleID varchar(18), @SupplierID varchar(5), @count int -- 分別用于存儲包含該料件的BomID及記錄數量
SELECT @count = ( SELECT COUNT(1) FROM [BOM] WHERE [PartID] = @partID )
IF ( @count > 0 )
BEGIN
SELECT @sampleID = ( SELECT TOP 1 [SampleID] FROM [BOM] WHERE [PartID] = @partID ORDER BY [PartID] DESC )
SELECT @errorMsg = '該料號已存在于[ ' +@sampleID + ' ] 等 ' + LTRIM(STR(@count)) + ' 筆樣品單中﹐不允許刪除﹗'
RETURN
END

-- 開始執行刪除操作
BEGIN TRANSACTION
-- 如果有單价信息﹐則刪除相關的單价信息
IF EXISTS ( SELECT [PartID] FROM [Quotation] WHERE [PartID] = @partID)
BEGIN
DELETE FROM [Quotation] WHERE [PartID] = @partID
IF ( @@error <> 0 )
BEGIN
ROLLBACK TRANSACTION
SELECT @errorMsg = '刪除操作未完成﹗'
RETURN
END
END

DELETE FROM [Part] WHERE [PartID] = @partID
IF ( @@error <> 0 )
BEGIN
ROLLBACK TRANSACTION
SELECT @errorMsg = '刪除操作未完成﹗'
RETURN
END

COMMIT TRANSACTION

GO

不過我個人覺得﹐与存儲過程的關系應不大﹐因為如果有多筆記錄的話﹐刪除時不會不出錯的﹒

[此贴子已经被作者于2007-8-29 13:50:20编辑过]


帮助那些真正需要帮助的人,是对帮助你的人最好的回报!
2007-08-29 13:45
C_B_Lu
Rank: 1
等 级:新手上路
威 望:1
帖 子:453
专家分:0
注 册:2006-1-10
收藏
得分:0 
问题仍未解决,顶一下.

帮助那些真正需要帮助的人,是对帮助你的人最好的回报!
2007-08-29 19:41
wzy_angel
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-8-30
收藏
得分:0 
如果数据库里面只有一条记录的话···它将会报错的
2007-08-30 11:09
师妃暄
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:805
专家分:107
注 册:2006-3-1
收藏
得分:0 

照错误提示来看,是说DataGridView的第一行不能为空

看经过我的测试.本机上却可以全部清空.....

一起期待高手解决


有实力才会有魅力 实力来自坚持不懈的努力
2007-08-30 14:12
crazymk
Rank: 1
等 级:新手上路
威 望:1
帖 子:343
专家分:0
注 册:2007-8-30
收藏
得分:0 
個人認為妳應該繞開這個異常,既然是綁定的數據那麼就完全可以先刪除那條數據而不對DataGridView做刪除操作(bsPartList.RemoveCurrent();
),刷新控件,數據源沒有數據那麼那條紀錄自然不會顯示在DataGridView上。

異常的原因大概就是(师妃暄)所說的那樣。

すばらしいコードを書き出すのは楽しい事です
2007-08-30 14:32
快速回复:DataGridView在刪除最后一筆記錄時拋出异常
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.041838 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved