虽然已经发了五张贴,而且每张100分。但是都没有结,大家不要急,问题一解决,在下马上结所有的贴。
在这里首先感谢“人生如梦”、“沐浴月光”、“在这里设置的哇”、“逍遥”、“jointan”、“龍月.NET”等几位大侠对在下的帮助。你们所教的,俺都设置了,但是效果貌似不是在下想要的,所以换下思路。功能描述:
有一个DataGridView控件(GridView_XFXM),在它下方有两个按钮分别是“保存”(BC_XFXM),“删除”(SC_XFXM)。当在DataGridView控件中修改了里面的记录的值之后,点击保存则保存修改后的记录到数据库。点击删除,则删除当前选择行。请问各位大侠这样的功能怎样实现比较好,说说思路,最好给点代码或实例,嘿嘿在下先说说自己的思路:将DataGridView控件中的数据读入到“DataTable控件”中,当修改“DataGridView控件中”中的数据时,修改相应的“DataTable控件”中的数据。保存将“DataTable控件”中的数据提交到数据库。删除时,删除相应的“DataTable控件”中的数据,同时将“DataTable控件”中的数据提交到数据库。这只是在下鄙陋的思路。渴望各位大侠更好的思路。但是,在下的思路中还存在几个问题。
问题一:以前都是将DataTable中的数据绑定到GridView中,怎样将“DataGridView”中的数据读入到“DataTable控件”中就不会了。
问题二:怎样在修改“DataGridView”中的数据时,同时修改相应的“DataTable”中的数据?
问题三:怎样获得“DataGridView”当前选择行的行号,根据行号删除“DataTable”中的数据?
问题四:怎样用“OleDbDataAdapter”将“DataTable”控件中的数据提交到数据库,进行更新。请各位大侠,能静下心对小弟指点一二,在下的项目快完工了哦,谢谢你们
在这里首先感谢“人生如梦”、“沐浴月光”、“在这里设置的哇”、“逍遥”、“jointan”、“龍月.NET”等几位大侠对在下的帮助。你们所教的,俺都设置了,但是效果貌似不是在下想要的,所以换下思路。功能描述:
有一个DataGridView控件(GridView_XFXM),在它下方有两个按钮分别是“保存”(BC_XFXM),“删除”(SC_XFXM)。当在DataGridView控件中修改了里面的记录的值之后,点击保存则保存修改后的记录到数据库。点击删除,则删除当前选择行。请问各位大侠这样的功能怎样实现比较好,说说思路,最好给点代码或实例,嘿嘿在下先说说自己的思路:将DataGridView控件中的数据读入到“DataTable控件”中,当修改“DataGridView控件中”中的数据时,修改相应的“DataTable控件”中的数据。保存将“DataTable控件”中的数据提交到数据库。删除时,删除相应的“DataTable控件”中的数据,同时将“DataTable控件”中的数据提交到数据库。这只是在下鄙陋的思路。渴望各位大侠更好的思路。但是,在下的思路中还存在几个问题。
问题一:以前都是将DataTable中的数据绑定到GridView中,怎样将“DataGridView”中的数据读入到“DataTable控件”中就不会了。
问题二:怎样在修改“DataGridView”中的数据时,同时修改相应的“DataTable”中的数据?
问题三:怎样获得“DataGridView”当前选择行的行号,根据行号删除“DataTable”中的数据?
问题四:怎样用“OleDbDataAdapter”将“DataTable”控件中的数据提交到数据库,进行更新。请各位大侠,能静下心对小弟指点一二,在下的项目快完工了哦,谢谢你们
解决方案 »
- c#能将一个常量和变量的内容合并为一个新标识符吗?(本人表达能力不强,请看下面正文)
- 问个白痴问题,图片怎么做超连接不用HREF
- .net (c#) 能否开发手机操作系统和应用程序?
- C#中如何实现对类对象的深层次的访问?(跟帖有分,解决问题另送200分!)
- 很简单的一个xml转换问题,在线等,答对立刻给分。。。
- 如何用C#.NET读取xml文件,并输出的代码是什么?
- 请问怎样在C#window程序中将DataSet中的数据导入到Excel
- 如何将Mdi父窗体委托给mdi子窗体,或者把Mdi父窗体的属性委托给mdi子窗体
- 麻烦各位有beta 2 cd-key的朋友将这个错误发给ms吧。大家千万不要将beta2安装在应用服务器上
- 200分求调用vc函数实战
- 请问我写的快速傅立叶变换的逆变换哪里错了?
- ScrollViewer和Grid的问题
//“消费项目”绑定GridView
string sql_xfxm_bdgv = "select * from xfxmb ";
DataTable dt_xfxm_bd = access.FillDt(sql_xfxm_bdgv);
GridView_XFXM.DataSource = dt_xfxm_bd;
this.GridView_XFXM.Columns[0].HeaderCell.Value = "序号";
this.GridView_XFXM.Columns[1].HeaderCell.Value = "推荐日期";
this.GridView_XFXM.Columns[2].HeaderCell.Value = "消费名称";
this.GridView_XFXM.Columns[3].HeaderCell.Value = "金额";
this.GridView_XFXM.Columns[4].HeaderCell.Value = "操作员";
如果是弄操作一个处理一个,捕获datagridview的editend时间,编辑完后根据编辑数据行中的关键字构造sql操作到数据库中就行了,全部操作完后在处理可以弄个sql数组把操作都保存下来,然后通过数据库的事务一次处理完。
//下面的是删除按钮的代码
try
{
if (MessageBox.Show("确定删除该信息吗?", "系统提示!", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
{
//删除当前记录
this.bindingSource1.RemoveCurrent();
//将结果更新
this.Invalidate();
this.bindingSource1.EndEdit();
this.MySqlDataAdapter.Update(MyDataSet, MyTable);
} }
catch (SqlException ex)
{
MessageBox.Show(ex.Message, "提示信息!", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning);
}
当然首先要绑定数据
SqlConnection conn = new SqlConnection("-------");
string MySql = "select *-------";
private string MyTable = "TABLE";
//获得数据适配器对象
SqlDataAdapter mysql = new SqlDataAdapter(MySql);
//给数据适配器对象添加表映射
MySqlDataAdapter.TableMappings.Add("Table", MyTable);
//设置数据适配器对象的查询语句
MySqlDataAdapter.SelectCommand = new SqlCommand(MySql, conn);
//绑定数据适配器对象
MySqlCommandBulider = new SqlCommandBuilder(MySqlDataAdapter);
//定义一个数据集对象
DataSet MyDataSet = new DataSet();
//填充数据集
MySqlDataAdapter.Fill(MyDataSet);
//赋予数据绑定对象的数据源属性
this.bindingSource1.DataSource = this.MyDataSet;
//赋予数据绑定对象的数据成员属性
this.bindingSource1.DataMember = MyTable;
//赋予数据网格对象的数据源属性
this.dataGridView1.DataSource = this.bindingSource1;
哎 么办法
希望楼主搞定。
dt = ((DataView)this.dataGridView1.DataSource).Table;
第二问:
我有个问题你DataGridView数据源应该是个DateSet或者DataTable吧?那你直接让他们用一个数据源不就对了~比如说你都用DataSet 更新DataGridView 后用适配器调用Update(Table)方法 不就更新了吗。。是我想错了 还是怎么了 。。我咋越看越不对劲
//自动生成用于更行的相关命令 dataadapter是之前声明
SqlCommandBuilder builder = new SqlCommandBuilder(dataadapter);
//将数据集中表的数据提交给数据库更新
dataadapter.Update(Table);//这个方法有重载!可以直接更新你的数据库
第三个问题。。
string strUserName = this.dataGridView1.CurrentCell.Value.ToString();
第四个问题
跟第二个一样
先创建连接,查询语句
然后创建适配器
然后创建 SqlCommandBuilder
然后用dataadapter.update()方法执行更新
您可以把您做的实例的代码或是类给俺发一份吗,想参考下,在下的邮箱:[email protected]谢谢了
先做下说明在下用的数据库是“Access”。恩,是有数据源“DataTable”,但是那个数据源是从数据库获得数据,然后绑定到“GridView”的。而现在需要的数据源应该是要从“DataGridView”获取数据,然后更新到数据吧。原来那个应该不可以用吧?
问题二:怎样在修改“DataGridView”中的数据时,同时修改相应的“DataTable”中的数据?
问题三:怎样获得“DataGridView”当前选择行的行号,根据行号删除“DataTable”中的数据?
关于前三个问题:
将DataGridView的DataSource属性 赋值后,DataTable已经与控件绑定后,添修改、删除DataGridView,绑定的DataTable也将改变。
可以使用DataGridView.DataSource as DataTable获取修改后的数据源。问题四:怎样用“OleDbDataAdapter”将“DataTable”控件中的数据提交到数据库,进行更新。我没有使用这个更新数据库。datatable有个方法GetChange();他可以获取datatable所有修改的行。
根据rowstate编辑sql语句,通过sql事务更新。这样万一有错误,可以回滚到没有修改前。
//假设这个是更新按钮
private void btnUpdate_Click(object sender, EventArgs e)
{
UpdateData();
}
private void UpdateData()
{
//总共行
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
string strColumn1= dataGridView1.Rows[i].Cells[j].Value;
//假设ID绑定在第一列
string strID= dataGridView1.Rows[i].Cells[0].Value;
//执行更新
//更新成功后要重新绑定一下dataGridView
//BindData();
}
}
//删除同理
问题二:你更新数据了,datagridview.Rows.clear(),重新绑定一次数据源
问题三:如果你按钮是单独的,int rownum=this.dataGridView1.CurrentRow.Index;
额~都一样么~你用Access 和sql server 都一样~只不过一个sqlconnection 一个是OleDbConnection 其他都是一样的~ 就前面的名字不一样。。一个sql 一个oledb
不管你用什么控件~数据源就一个对吧~那你Dgv吧数据源修改后~你那个Dt在刷一边不就完了么!最省事!
我邮箱:[email protected]不建议的话的话把你项目要求给我看看~~我到现在还没弄懂你想咋做
加你好友了。有个朋友说。
直接操作grid的数据源就可以了:首先你从数据库取数据DataTable dt = GetDataFromDB();
然后绑定到grid:DataGrid.DataSource=dt;当你直接修改grid中的数据时,dt中的数据也会变化,你只需要将dt更新到数据库就行了。在下还是有点疑惑:
为什么“直接修改grid中的数据时,dt中的数据也会变化”?
如果是删除“DataGridView”中的一行“dt”也跟着变化?
你那个朋友说的就是我想的。。你直接修改数据源~你就是绑定10个 他10个也会跟着变首先你从数据库取数据DataTable dt = GetDataFromDB();
然后绑定到grid:DataGrid.DataSource=dt;这个朋友说的对这呢啊你删除一行~也是从数据源里删除一行你数据源都变了 ,,你其他绑定这个数据源的 控件 也不是就变了
....... ........建议不要将DataGridView读取到DataTable中
每次修改直接从数据库中重新绑定搜一下GridView 72般绝技
可以作为参考
{
cmOrders.AddNew();//新增一条记录
SetDefaultValue();//设置默认值
SetModifyMode(true);//设置控件只读等属性
}
if(e.Button.ToolTipText=="修改")
{
SetModifyMode(true);
}
if(e.Button.ToolTipText=="删除")
{
DialogResult result=MessageBox.Show("确认删除?","删除数据",MessageBoxButtons.OKCancel);
if(result==DialogResult.OK)
if(cmOrders.Count>0)//立即从数据集中删除
{
cmOrders.RemoveAt(cmOrders.Position);
da1.Update(dataSet11);
}
else
MessageBox.Show("表中为空,已无可删除数据","提示",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
if(e.Button.ToolTipText=="提交")
{
bool canSubmit;
canSubmit=this.CheckNotNull();
if(canSubmit==false)//有非空值字段为空,不允许提交
{
return;
}
cmOrders.EndCurrentEdit();
if(dataSet11.GetChanges()!=null)
{
try
{
da1.Update(dataSet11);
SetModifyMode(false);
}
catch(Exception express)
{
MessageBox.Show(express.ToString(),"提示",MessageBoxButtons.OK,MessageBoxIcon.Error);
dataSet11.RejectChanges();
}
}
return;
}