Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DataGridView编辑单元_C#_Visual Studio 2010_Ado.net_Datagridview - Fatal编程技术网

C# DataGridView编辑单元

C# DataGridView编辑单元,c#,visual-studio-2010,ado.net,datagridview,C#,Visual Studio 2010,Ado.net,Datagridview,我的最后一个问题因为不清楚而结束了,所以我会再试一次,因为我真的需要帮助 我正在使用带OLEDB连接的Visual Studio 2010。现在我正在开发一个windows窗体。我注意到,datagridview允许您使用编辑/添加/删除模式,因此我希望能够使用它 我想做的是使用cellcontentchanged事件编辑我的数据库。当我更改内容并离开时,它会询问我是否要编辑此单元格。如果我说是的话,那么这个单元格就会改变 我确保ReadOnly=false和enabled=true。之前,从我

我的最后一个问题因为不清楚而结束了,所以我会再试一次,因为我真的需要帮助

我正在使用带OLEDB连接的Visual Studio 2010。现在我正在开发一个windows窗体。我注意到,datagridview允许您使用编辑/添加/删除模式,因此我希望能够使用它

我想做的是使用cellcontentchanged事件编辑我的数据库。当我更改内容并离开时,它会询问我是否要编辑此单元格。如果我说是的话,那么这个单元格就会改变

我确保
ReadOnly=false
enabled=true
。之前,从我读到的内容来看,我会这样做:

adapter.Update(dataset); 
或者类似的事情。但是,这不会保存对数据库的更改。我也不知道如何以编程方式进行编辑。我也不确定是否应该使用OLEDB update命令。如果有什么不清楚的地方,请回复,我很乐意澄清。谢谢大家!

编辑:抱歉,如果它仍然很难理解!
这里有一些代码

    private void dgv_DataLookup_CellValueChanged(object sender, DataGridViewCellEventArgs e)
    {

        DialogResult dr;
        dr = MessageBox.Show("Are you sure you want to edit this field?", "Edit Cell", MessageBoxButtons.YesNo);

        if (dr == DialogResult.Yes)
        {
            //update the table in my database
        }
    }
这还不是很多,但希望你能试着看看我在做什么

再次编辑:这是此部件的所有相关代码(这是显示我要编辑的datagridview的代码)


如果您需要更多代码,请告诉我。非常感谢您的帮助:)

我也不确定您在这里要问什么,但我假设您只是问如何将编辑后的数据保存回数据库。我不会使用CellValueChanged事件。通常,您只需让用户编辑网格中的数据,然后让他们单击保存按钮或在表单关闭时保存数据

void Save()
{ 
    OleDbConnection con=new OleDbConnection("Put your connect string here");
    OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM TestQuery", con);
    OleDbCommandBuilder cb = new OleDbCommandBuilder(da);
    DataTable tbl = dsB.Tables[0];
    da.Update(tbl);
    tbl.AcceptChanges();
}

您可能希望重用一些已经创建的对象,如连接,但这是基础

我自己解决了这个问题。只需使用owningcolumn owningrow即可获得所需的值。谢谢

@wilson-这个问题仍然很难理解。1) 你在什么环境下工作?您提到了datagridview,但这是一个winforms控件,您还提到了asp.net。2) 你需要实现什么?您似乎要求在每次单元格更改时保存数据,为什么不在其他时间保存呢?3) 提供一些您试图让我们对您的需求有更多了解的代码。您有没有一步一步地了解您的代码在做什么?当您调用adapter.Update(数据集)时,您的数据集是否实际发生了更改?如果您剪切datagridview并直接更新数据集,会发生什么情况?我在winforms中工作,任何更新数据库的方法都可以,我只需要能够从datagridview中进行更新。@Wilson那么您有一个datagridview,其中数据集是数据源?在dataadapter.Update()调用中使用该数据集?您是否在CellValueChanged事件中放置了断点,并在调试器中查看了数据集?我认为应该在这里提交更改,但您应该检查。你看过这样的例子了吗?@Wilson你想做的应该行得通。这并不太复杂,所以一些基本的错误一定出了问题,但是如果没有所有的代码来查看,这些基本错误通常很难诊断。所以我的建议是从一个非常简单的方法开始,然后从那里开始。如果您甚至不能直接让dataadapter工作,那么添加datagridview只会让事情变得混乱。因此,请获得一个基本的工作示例,然后在“成品”中添加更多更改,直到出现故障,然后告诉我们您所做的。谢谢您的回答。我在代码中尝试了这一点,但在使用函数“不支持对多个基表生成动态SQL”时出现了此错误。DataAdapter中的select语句必须是一个简单的select语句,没有Where子句,并且只能从一个表中进行选择。换句话说,如果您正试图这样做,则不能使用原始select语句或原始DataAdapter。如果您使用的是“SELECT*fromtestquery”,并且出现了错误,那么CommandBuilder太笨了,您必须手动创建插入和更新命令对象。那太乏味了。
void Save()
{ 
    OleDbConnection con=new OleDbConnection("Put your connect string here");
    OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM TestQuery", con);
    OleDbCommandBuilder cb = new OleDbCommandBuilder(da);
    DataTable tbl = dsB.Tables[0];
    da.Update(tbl);
    tbl.AcceptChanges();
}