老子不活了,分都用了,没了

chaye12 2008-07-05 04:17:18
问两个问题,1
string source = "pcdb.mdb";
string conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + source;
string sql = "select ryzl.工号,ryzl.姓名, ryzl.养老金 + ryzl.医疗金 + ryzl.失业金 as 三金 from ryzl";
OleDbConnection olecon = new OleDbConnection(conn);
OleDbDataAdapter sda = new OleDbDataAdapter(sql, olecon);
DataSet ds = new DataSet();
sda.Fill(ds, "ryzl");
DataTable dt = new DataTable();
dt = ds.Tables["ryzl"];
string sql1 = "select * from sqxm";
OleDbConnection olecon1 = new OleDbConnection(conn);
OleDbDataAdapter sda1 = new OleDbDataAdapter(sql1, olecon1);
DataSet ds1 = new DataSet();
sda1.Fill(ds1, "sqxm");
DataTable dt1 = ds1.Tables["sqxm"];
foreach (DataRow dr1 in dt1.Rows)
{
dt.Columns.Add(new DataColumn(dr1["money"].ToString()));
我想在这把列的值都还成dr1["price"].ToString()));请问该如何实现呢
}
dataGridView1.DataSource = ds.Tables[0];

2,是我的datagirdview绑定了数据表A,显示在窗体中,我想让它是可编辑状态,可以添加记录,然后点击更新按钮后,
datagirdview自己刷新数据,数据表中的数据要背刷新,请问该如何去做?
...全文
196 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
chaye12 2008-07-07
  • 打赏
  • 举报
回复
好,可以结贴了,
wheeler 2008-07-07
  • 打赏
  • 举报
回复
回复LZ站内消息

1、我用的是ACCESS数据库,如何添加视图呢????
视图在access里面叫"查询"。

2、表现层是不是就是写后台代码的过程呢?
不是。
数据访问层:你写的关于ACCESS访问的部分(这部分仅至DataSet,DataTable之类的为止)。
业务逻辑层:把(包含但不仅限于)DataSet,DataTable之类的折腾来折腾去(包含但不仅限于 组合啊~四则运算啊~比较啊~)的那部分。
表示层:把折腾来折腾去之后的结果输出给用户看 以及 接受用户输入,获得如何折腾数据的信息 的部分(包含但不仅限于 窗体、报表)。
wheeler 2008-07-06
  • 打赏
  • 举报
回复
OMG 伟大的想法。。。。。。

在数据库中建立临时表;这种操作都在内存中进行的话,比较悬乎。

string 建立临时表语句 = @"......(...)";
foreach (...... in dr["money"])
{
建立临时表语句 += @", 生活费交通费之流 int";
}
建立临时表语句 += @")";
//建立临时表。。。
foreach (......)
{
string 填充临时表 = @"insert ...... (ryzl中的值, 生活费交通费之流)";
//执行T-SQL语句。。。
}

==================偶是无敌的分割线==================
当然了,这么牛B的问题,最好是在设计数据库的时候就解决了!说实话,其实现在硬盘很大,这点数据冗余还是可以接受的。
chaye12 2008-07-06
  • 打赏
  • 举报
回复
其实这是张工资汇总表,肯定不能一个表就实现功能,因为各种费用可以添加!
足球中国 2008-07-06
  • 打赏
  • 举报
回复
这么多人帮你还是继续活下去了.
不然我们也没分赚了.
wheeler 2008-07-06
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 chaye12 的回复:]
其实这是张工资汇总表,肯定不能一个表就实现功能,因为各种费用可以添加!
[/Quote]

。。。。。。早说嘛!

不用表,而且这个不应该在表现层解决;应该在数据库内添加视图。
chaye12 2008-07-05
  • 打赏
  • 举报
回复
我再把大体意思说下,datagirdview先绑定ryzl表,
然后再往其后面添加自定义列,列名为dr[“money”],列下面的值全部是dr["price"];
假如表的结构是这样,

ID money price

1 生活费 200
2 交通费 150


那么datagirdview中加的自定义列就为
生活费 交通费

200 150
200 150
200 150
。。。。。。
我想现在该明白了
chaye12 2008-07-05
  • 打赏
  • 举报
回复
不是,我是在后面再加一列,列名为sqxm.money,下面的值全部用sqxm.price填充!
比如money对应的值为生活费,pirce对应的就是200,
也就是说新增一列,为

生活费
200
200
200
200
明白了吗?

chaye12 2008-07-05
  • 打赏
  • 举报
回复
8楼的我就是要实现那个功能,
(这代码是dt1有多少行,你就在dt里增加多少列了)

wheeler 2008-07-05
  • 打赏
  • 举报
回复
首先
dt.Columns.Add(new DataColumn(dr1["money"].ToString()));
我想在这把列的值都还成dr1["price"].ToString()));请问该如何实现呢

你丫到底是要money还是price???

就当你是price了!!!
=============================================================

是不是
ryzl.工号 ryzl.姓名 三金(ryzl.养老金 + ryzl.医疗金 + ryzl.失业金)<--此处用sqxm.price替换?还是后面加一列sqxm.price


//用sqxm.price替换
string sqlstring=@"select ryzl.工号, ryzl.姓名, sqxm.price from ryzl, sqxm";
//=========================================================================
//加一列sqxm.price
string sqlstring=@"select ryzl.工号, ryzl.姓名, ryzl.养老金 + ryzl.医疗金 + ryzl.失业金 as 三金, sqxm.price from ryzl, sqxm";


那些万年不变的代码就不贴了哈!
Nobel0429 2008-07-05
  • 打赏
  • 举报
回复
你2张表的表结构帖出来看看,更新按钮需要更新1张表 还是2张表
表A是不是有个字段 'price' 对应表B 的'money' 如果是这样的话 sql1的那条语句 把 price 也查出来



ygxdsg119 2008-07-05
  • 打赏
  • 举报
回复
lz别激动啊,代码就象女朋友一样,要温柔.
1.这个完全可以用一个sql语句全部取出来,一来可以节省连接数据库的系统开销,二来也不用在对2个表做操作了.
2.我想应该是这样:在GridView的更新事件中要重新绑定.
void Page_Load(Object sender,EventArgs e)
{
bind();
}
void GridView1_RowUpdated(object sender, GridViewUpdatedEventArgs e)
{
//更新
bind();
}
void bind()
{
//
//
//
GridView1.dataSource = ds.Tables[0];//绑定GridView
GridView1.dataBind();
}
当用户初次请求这个页面的时候,执行PageLoad,绑定数据,用户看到一个列表.
当用户编辑好了数据,点击更新时,页面的生命周期是先执行Page_Load,再执行GridView1_RowUpdated.
这个可以调试一下看出来.
所以是先绑定(PageLoad),再更新(RowUpdated).
那么在GridView1_RowUpdated事件中,当更新完数据后让其绑定就可以了.
江城老温 2008-07-05
  • 打赏
  • 举报
回复
问题1:

foreach (DataRow dr1 in dt1.Rows)
{
dt.Columns.Add(new DataColumn(dr1["money"].ToString()));
我想在这把列的值都还成dr1["price"].ToString()));请问该如何实现呢
}
------------------------------------------------------------
这是不对的,这代码是dt1有多少行,你就在dt里增加多少列了。

要达到你的目的,你应该在foreach循环外面给dt增加列,然后在循环里给新增的列赋值。


问题2:
孟子的代码没问题。关键在于OleDbCommandBuilder cb = new OleDbCommandBuilder(da);
这句你既然已经写到代码里了,应该可以实现更新了。
chaye12 2008-07-05
  • 打赏
  • 举报
回复
谁帮我看看代码,靠,孟子大哥都给我写代码了,我还搞不好,真他娘的郁闷!
RichardSzwz 2008-07-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 itymx 的回复:]
不用急 慢慢解决
[/Quote]
我看也是,别急,慢慢来,问题出来就是给人解决的!
chaye12 2008-07-05
  • 打赏
  • 举报
回复
string source = "pcdb.mdb";
string conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + source;
OleDbConnection olecon = new OleDbConnection(conn);
OleDbDataAdapter da = new OleDbDataAdapter("select * from jsgx", olecon);
OleDbCommandBuilder cb = new OleDbCommandBuilder(da);
DataSet ds = new DataSet();
da.Fill(ds);
dataGridView1.DataSource = ds.Tables[0];

//保存
da.Update(ds);

这是孟子大哥写的代码,我稍微做了修改,但是我放在按钮的更新事件里,点击后又成了我数据库中的表了!
itymx 2008-07-05
  • 打赏
  • 举报
回复
不用急 慢慢解决
chaye12 2008-07-05
  • 打赏
  • 举报
回复
就是在ryzl表后面加了一自定义列,列名跟列值都是从另一个表中查询出来的!第1个dr1["money"].ToString())); 绑定列名,功能实现了,
另一个dr1["price"].ToString()我想填充列下面的所有值!
chaye12 2008-07-05
  • 打赏
  • 举报
回复
俩表没关系,我想代码已经很明显了吧
yuxianye1 2008-07-05
  • 打赏
  • 举报
回复
分多少不是问题,活不活是问题。
sqxm ryzl 这两个表啥关系?

建议你用一个查询语句查出来,然后绑定到dataGridView1

110,591

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧