带有过程的Datagridview不会更新

时间:2012-09-04 16:54:32

标签: c# sql-server stored-procedures

我已在SQL中编写此过程并正在使用

ALTER proc [dbo].[gridcombo] (@tabela int)
as

/*1 Setores */
if  (@tabela=1)
begin
select setor_id, setor_nome  from tbl_setores
end
/*2  Atividade Economica   */
if  (@tabela=2)
begin
SELECT cnae_id, cnae_descricao  FROM tbl_CNAE
end

我使用此过程在C#

中填充datagridview
    public SqlConnection sqlcon = Tconex.GetConnection();
    public SqlDataAdapter da2 = new SqlDataAdapter();
    public DataTable dt1 = new DataTable(); 

        SqlParameter tabela = new SqlParameter("@tabela", SqlDbType.Int);
        tabela.Value = 1;
        SqlCommand llena = new SqlCommand("gridcombo", sqlcon);
        llena.Parameters.Add(tabela);
        llena.CommandType = CommandType.StoredProcedure;
        da2.SelectCommand = llena;
        da2.Fill(dt1);
        BindingSource bsource = new BindingSource();
        bsource.DataSource = dt1;
        dataGridView1.DataSource = bsource;
        dataGridView1.AutoGenerateColumns = true;
        sqlcon.Close();

当我更改tabela.value时,数据网格会填充一个或另一个表,这样可以正常工作。

但我无法通过datagrid编辑表格

        da2.UpdateCommand = new SqlCommandBuilder(da2).GetUpdateCommand();  
        da2.Update(dt1);
        sqlcon.Close();

我做错了什么?为什么我不能更新表?

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

您必须在PrimaryKey中返回SelectCommand个表格,才能正确生成更新命令

链接:http://msdn.microsoft.com/fr-fr/library/system.data.sqlclient.sqlcommandbuilder%28v=vs.80%29.aspx