【求助】怎么动态添加GridView的一行啊。。

Handsome__Guy 2012-08-07 02:36:33
而且动态添加的每一行里要有下拉列表,要实现联动效果,求各位大牛给思路啊
...全文
517 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
孟子E章 2012-08-10
  • 打赏
  • 举报
回复
例子

<%@ Page Language="C#" Debug="true" AutoEventWireup="true" EnableEventValidation="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
// 设置每页显示的行数
int TotalRowCount = 12;
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
System.Data.DataTable dt = new System.Data.DataTable();
dt.Columns.Add(new System.Data.DataColumn("Id", typeof(System.Int32)));
System.Data.DataView dv = dt.DefaultView;
int addCount = TotalRowCount - dv.Table.Rows.Count;
for (int i = 0; i < addCount; i++)
dv.Table.Rows.Add();
GridView1.DataSource = dt;
GridView1.DataBind();
}
}

protected void d1_SelectedIndexChanged(object sender, EventArgs e)
{

DropDownList d1 = sender as DropDownList;
DropDownList d2 = d1.NamingContainer.FindControl("d2") as DropDownList;

if (d1.SelectedValue == "A")
{
d2.Items.Clear();
d2.Items.Add(new ListItem("C1"));
d2.Items.Add(new ListItem("C2"));
}
else
{
d2.Items.Clear();
d2.Items.Add(new ListItem("C3"));
d2.Items.Add(new ListItem("C4"));
}
}
protected void d2_SelectedIndexChanged(object sender, EventArgs e)
{
DropDownList d2 = sender as DropDownList;
DropDownList d3 = d2.NamingContainer.FindControl("d3") as DropDownList;
d3.Items.Clear();
d3.DataSource = new String[]{"aaaa","bbbbb","cccc"};
d3.DataBind();
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:DropDownList ID="d1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="d1_SelectedIndexChanged">
<asp:ListItem>A</asp:ListItem>
<asp:ListItem>B</asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:DropDownList ID="d2" runat="server" AutoPostBack="true" OnSelectedIndexChanged="d2_SelectedIndexChanged">
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:DropDownList ID="d3" runat="server">
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</form>
</body>
</html>
maoxiongyi1 2012-08-10
  • 打赏
  • 举报
回复
大致的思路是这样的:
在添加一行前,首先把gridview中的数据取出放到datatable中,然后再给datatable添加行,添加结束后再把数据绑定到gridview中即可。至于还要添加下拉菜单,提前定义好下拉菜单,然后在给datatable添加行的时候直接添加即可。
紫魂一号 2012-08-07
  • 打赏
  • 举报
回复
像你这种情况.可以在gridview里弄三个DropDownList的模板列 分别命好名 ddl1,ddl2,ddl3
然后..这三个控件可以指定改变事件
而这三个ddl 可以在
protected void GridViewRData_RowDataBound(object sender, GridViewRowEventArgs e)
{
DropDownList ddl1 = e.Row.FindControl("ddl1") as DropDownList;
DropDownList ddl2 = e.Row.FindControl("ddl2") as DropDownList;
DropDownList ddl3 = e.Row.FindControl("ddl3") as DropDownList;
//给三个下拉框绑定数据.至于怎么绑就看你怎么写了
}
//下面是三个下拉框的改变事件..
杰拉尔 2012-08-07
  • 打赏
  • 举报
回复
View Code 

#region DynamicShow_gdvUpgradeQuery动态增加维度列
private void DynamicShow_gdvDownload(List<DocAttributeEntity> attributeList)
{
//动态加入列之前先将之前加入的列清除,防止重复列出现
for (int i = 0; i < gdvDownload.Columns.Count; i++)
{
if (i > 2 && i < gdvDownload.Columns.Count -5)
{
gdvDownload.Columns[i].Visible = false;
}
}
//gdvDownload 动态增加列
foreach (DocAttributeEntity attribute in attributeList)
{
BoundField field = new BoundField();
field.DataField = attribute.AttName;
field.HeaderText = attribute.AttName;
field.ItemStyle.CssClass = "gdv_pdmItemLeft";
field.HeaderStyle.CssClass = "gdv_pdmItemLeft";
//field.SortExpression = attribute.AttName;

//留最后2个按钮列
gdvDownload.Columns.Insert(gdvDownload.Columns.Count - 5, field);
}
}
#endregion
紫魂一号 2012-08-07
  • 打赏
  • 举报
回复
晕 那你总的给定数据才能让gridview展现出来啊..
DataTable dt 这个东东你可以先创建一个空的啊..然后
你也可以构造三个列啊..
DataRow dr = dt.NewRow();//这是构造一个空行..
//这里可以给数据也可以不给........
dt.Rows.Add(dr);
//下面这个可以自己去添加不同的控件啊...
protected void GridViewRData_RowDataBound(object sender, GridViewRowEventArgs e)
{
Controle control1;
Controle control2;
Controle control3;
e.Row.Controls.AddAt(位置,control1);....................
//给控件注册事件...
}
Handsome__Guy 2012-08-07
  • 打赏
  • 举报
回复
我的gridview没有数据。里面全部都是DropDownList。每列三个,前两个都要触发事件的。怎么做。。。
[Quote=引用 2 楼 的回复:]

你的gridview 应该是绑定的 dataset 或者 datatable 吧。。处理这个东东就好了
假设前面有写好的DataTable dt。。。
DataRow dr = dt.NewRow();......
dt.Rows.Add(dr);
然后再重新绑定DataBind()。。只要重新绑定就会运行下面的事件
再在行绑定事件里去添加你要的控件。。
protected voi……
[/Quote]
紫魂一号 2012-08-07
  • 打赏
  • 举报
回复
如果之前是你gridview已经绑有这个下拉框的列了那就无需再去添加了
紫魂一号 2012-08-07
  • 打赏
  • 举报
回复
如果还要触发事件 ,那就
protected void GridViewRData_RowDataBound(object sender, GridViewRowEventArgs e)
{

e.Row.Controls.AddAt(位置,控件);
//给控件注册事件...
}
wangfnso 2012-08-07
  • 打赏
  • 举报
回复
也可以将下拉列表框绑定到GridView的一列上。
Handsome__Guy 2012-08-07
  • 打赏
  • 举报
回复
可是给DataTable里面不能加控件啊。。我的gridview里面没有数据。要求全部是下拉列表。而且要有联动效果,要动态生成DropDownList。而且它们的事件怎么触发?[Quote=引用 1 楼 的回复:]

给DataTable添加一行,然后绑定到gridview,做一个模板列,以后添加的列都会有这个模板列
[/Quote]
紫魂一号 2012-08-07
  • 打赏
  • 举报
回复
你的gridview 应该是绑定的 dataset 或者 datatable 吧。。处理这个东东就好了
假设前面有写好的DataTable dt。。。
DataRow dr = dt.NewRow();......
dt.Rows.Add(dr);
然后再重新绑定DataBind()。。只要重新绑定就会运行下面的事件
再在行绑定事件里去添加你要的控件。。
protected void GridViewRData_RowDataBound(object sender, GridViewRowEventArgs e)
{
e.Row.Controls.AddAt(位置,控件);
}
思路大致是这样。。。
bdmh 2012-08-07
  • 打赏
  • 举报
回复
给DataTable添加一行,然后绑定到gridview,做一个模板列,以后添加的列都会有这个模板列

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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