dataGridView数据绑定问题

windxx 2010-04-16 05:06:21
用DataGridView显示数据。
有以下Table
table1:
id name type
1 苹果 2
2 番茄 1
table2:
id type
1 蔬菜
2 水果
3 其他

在dataGridView(dgv)上显示为
dgv:
id name typeName
1 苹果 水果
2 番茄 蔬菜

现在想将dgv上的type进行更改,比如想将Rows[0]的typeName改为"其他"(对应id = 03)
那么直观的方式是在dgv上直接更改,所以,dgv的type列应该选择为DataGridViewComboBoxColumns,但是为了数据显示方便、快速,我使用了dgv.DataSource = dt_;(dt_就是table1和table2结合产生的id name typeName表)
这时候就不能设置dgv.Columns["typeName"]为DataGridViewComboBoxColumns类型了,
请问怎么解决呢?
(目的:1.绑定方便(用DataSource);2.更改方便——应用DataGridViewComboBoxColumns)
谢谢!
另外现在在CSDN上发表帖子为什么这么辛苦?登陆了主界面在发表的时候还要登陆,修改也要登陆,总是说我是Gust身份。。。
是不是我自己的电脑什么地方设置问题。。。
...全文
104 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
windxx 2010-04-24
  • 打赏
  • 举报
回复
不是现实不了数据的问题,合并什么的很简单,update也简单,只是在修改的时候,不能像pb什么的那样直接在dgv上应用comboBox的形式,虽然,vs提供了dataGridViewComboBoxColumns,但是如果自己添加就不能应用dataSource了,而且自己刷数据更新比较缓慢,不如dataSource快速,就是这个问题,所以想问问大家有没有什么方法即可以应用dataSource自动装载dgv数据,又可以让自动装载的columns不那么单一,比如可以显示为comboBox或者checkBox的形式,目前我没有找到解决方法,我都是重写了dataGridView加入了自己的控件,感觉不爽,虽然可以完整的实现但是就觉得这么简单常用的功能不应该花费这么力气还要自己写控件,所以请教一下大家怎么做的,谢谢
mayonglong 2010-04-24
  • 打赏
  • 举报
回复
放到数据库中~
小D2013 2010-04-24
  • 打赏
  • 举报
回复
//以下是asp.net的,northwind数据库,你自己再导入一些命名空间就能运行了
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

SqlConnection conn;
SqlCommand cmd;
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
BindGridView();
}
}

//绑定
private void BindGridView()
{
conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLConnString1"].ConnectionString);
cmd=new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "select * from employees";
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
sda.Fill(ds);
GridView1.DataKeyNames = new string[] { "employeeid" };//必须设置主键,才能编辑,或删除
GridView1.DataSource = ds.Tables[0];
GridView1.DataBind();

}
//city数据源
public SqlDataReader ddlbind()
{
string sqlstr = "select distinct city from employees";
SqlConnection sqlcon = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLConnString1"].ConnectionString);
SqlCommand sqlcom = new SqlCommand(sqlstr, sqlcon);
sqlcon.Open();
return sqlcom.ExecuteReader();
}

//编辑
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.EditIndex = e.NewEditIndex;
//设置完GridView1.EditIndex后,其实只是修改了gridview的一个属性,必须重新绑定,才能立即显示改变
//后的状态,否则要点击2次
BindGridView();
}
//取消编辑
protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
GridView1.EditIndex = -1;
BindGridView();
}

//删除
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLConnString1"].ConnectionString);
conn.Open();
cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "delete employees where employeeid=@employeeid";
SqlParameter param = new SqlParameter("employeeid",GridView1.DataKeys[e.RowIndex].Value);
cmd.Parameters.Add(param);
cmd.ExecuteNonQuery();
BindGridView();
}
//修改
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLConnString1"].ConnectionString);
conn.Open();
cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = @"update employees set LastName=@LastName,
HireDate=@HireDate,
City=@City,
Address=@Address,
Country=@Country
where employeeid=@employeeid";
SqlParameter param = new SqlParameter("employeeid", GridView1.DataKeys[e.RowIndex].Value);
SqlParameter param0 = new SqlParameter("LastName", ((TextBox)((GridView1.Rows[e.RowIndex]).Cells[2].Controls[0])).Text);
SqlParameter param1 = new SqlParameter("HireDate", ((TextBox)((GridView1.Rows[e.RowIndex]).Cells[3].Controls[0])).Text);
SqlParameter param2 = new SqlParameter("City", ((DropDownList)((GridView1.Rows[e.RowIndex]).Cells[4].Controls[1])).Text);
SqlParameter param3 = new SqlParameter("Address", ((TextBox)((GridView1.Rows[e.RowIndex]).Cells[5].Controls[0])).Text);
SqlParameter param4 = new SqlParameter("@Country", ((TextBox)((GridView1.Rows[e.RowIndex]).Cells[6].Controls[0])).Text);
cmd.Parameters.Add(param);
cmd.Parameters.Add(param0);
cmd.Parameters.Add(param1);
cmd.Parameters.Add(param2);
cmd.Parameters.Add(param3);
cmd.Parameters.Add(param4);
cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
GridView1.EditIndex = -1;
BindGridView();
}
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
<link href="../../App_Themes/css/jsj.css" rel="Stylesheet" type="text/css" />
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnRowEditing="GridView1_RowEditing" OnRowCancelingEdit="GridView1_RowCancelingEdit" OnRowDeleting="GridView1_RowDeleting" OnRowUpdating="GridView1_RowUpdating">
<Columns>
<asp:CommandField ButtonType="Button" ShowDeleteButton="True" ShowEditButton="True"
ShowHeader="True" />
<asp:BoundField DataField="EmployeeID" HeaderText="EmployeeID" ReadOnly="True" SortExpression="EmployeeID" />
<asp:BoundField DataField="LastName" HeaderText="LastName" SortExpression="LastName" />
<asp:BoundField DataField="HireDate" HeaderText="HireDate" SortExpression="HireDate" />
<asp:TemplateField HeaderText="city" SortExpression="city">
<ItemTemplate>
<asp:Label ID="lbl1" runat="server" Text='<%# Bind("city") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server" SelectedValue='<%# Bind("city") %>' DataSource='<%# ddlbind()%>' DataValueField="city" DataTextField="city" >
</asp:DropDownList>
</EditItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Address" HeaderText="Address" SortExpression="Address" />
<asp:BoundField DataField="Country" HeaderText="Country" SortExpression="Country" />
</Columns>
</asp:GridView>
</div>
</form>
</body>
</html>
chenhui20082007200 2010-04-16
  • 打赏
  • 举报
回复
每天回帖即可获得10分可用分!
gwf25sz 2010-04-16
  • 打赏
  • 举报
回复
搞个临时表合并一下呗,更新操作的时候手动去写语句,然后重新绑定,完全可以实现啊
十八道胡同 2010-04-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 yaodan11333 的回复:]
另外现在在CSDN上发表帖子为什么这么辛苦?登陆了主界面在发表的时候还要登陆,修改也要登陆,总是说我是Gust身份。。。
是不是我自己的电脑什么地方设置问题。。。

登陆的时候选择记住密码!
[/Quote]
浏览器的问题。。
yaodan11333 2010-04-16
  • 打赏
  • 举报
回复
另外现在在CSDN上发表帖子为什么这么辛苦?登陆了主界面在发表的时候还要登陆,修改也要登陆,总是说我是Gust身份。。。
是不是我自己的电脑什么地方设置问题。。。

登陆的时候选择记住密码!
各种报错 2010-04-16
  • 打赏
  • 举报
回复
楼主可以考虑将dataGridView 修改后的数据,利用Sql语句内连接插入到数据库,然后在绑定dataGridView


110,566

社区成员

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

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

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