读书人

关于点击按钮自动增加行的有关问题

发布时间: 2012-04-17 15:06:33 作者: rapoo

关于点击按钮自动增加行的问题
最近遇到一个问题,在一个表单中,点击一个添加按钮会自动增加一行。点击删除按钮就会删除最后一行。
这一行里面有一个列是下拉列表去选,当选中一个值以后(比如选中某个公司名字),这一行的其他列将填充这一个选中公司的一些信息,然后在点击添加按钮又会添加一个行,和第一行是一样的,但是选择不同的公司,这一行的其他列也会填充另外公司的信息,我想知道怎么实现,想来想去都没办法给下拉列表绑定事件。 哪位高手可以指点一下啊?最好又完整的解决思路谢谢了啊。是用ASP.NET做的。
然后点击删除按钮删除最后一行又怎么做呢?

[解决办法]
你可以参考
http://blog.csdn.net/net_lover/article/details/6678600
现成的源代码。拷贝粘贴成xx.aspx就可以看效果
[解决办法]
可以打开的

<%@ Page Language="C#" AutoEventWireup="true" EnableViewState="true" %>
<%@ Import Namespace="System.Data" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
private DataTable dataTable = null;
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
this.Bind(true);
}
}

private DataTable GetDataTable()
{
if (ViewState["dt"] == null)
{
dataTable = new DataTable();
dataTable.Columns.Add("usage", typeof(String));
dataTable.Columns.Add("steelKind", typeof(String));
dataTable.Columns.Add("castingTon", typeof(String));
return dataTable;
}
else
{
return ViewState["dt"] as DataTable;
}
}

private void Bind(bool AddBlankRow)
{
dataTable = GetDataTable();
if (AddBlankRow) dataTable.Rows.Add(dataTable.NewRow());
this.GridView1.DataSource = dataTable;
this.GridView1.DataBind();
}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DropDownList x1 = e.Row.FindControl("x1") as DropDownList;
DropDownList x2 = e.Row.FindControl("x2") as DropDownList;
TextBox x3 = e.Row.FindControl("x3") as TextBox;

String usage = DataBinder.Eval(e.Row.DataItem, "usage").ToString();
String steelKind = DataBinder.Eval(e.Row.DataItem, "steelKind").ToString();
String castingTon = DataBinder.Eval(e.Row.DataItem, "castingTon").ToString();

x3.Text = castingTon;
ListItem xx1 = x1.Items.FindByValue(usage);
if (xx1 != null) xx1.Selected = true;
ListItem xx2 = x2.Items.FindByValue(steelKind);
if (xx2 != null) xx2.Selected = true;
}
}

protected void LinkButton1_Click(object sender, EventArgs e)
{
//总是取最后的一行
GridViewRow row = GridView1.Rows[GridView1.Rows.Count - 1];
DropDownList x1 = row.FindControl("x1") as DropDownList;
DropDownList x2 = row.FindControl("x2") as DropDownList;
TextBox x3 = row.FindControl("x3") as TextBox;

dataTable = this.GetDataTable();
DataRow newRow = dataTable.NewRow();
if (dataTable.Rows.Count > 0)
{
newRow = dataTable.Rows[dataTable.Rows.Count - 1];
}

newRow["usage"] = x1.SelectedValue;
newRow["steelKind"] = x2.SelectedValue;
newRow["castingTon"] = x3.Text;
if (dataTable.Rows.Count == 0)
{
dataTable.Rows.Add(newRow);
}

ViewState["dt"] = dataTable;
this.Bind(true);

}
protected void LinkButton2_Click(object sender, EventArgs e)
{
dataTable = this.GetDataTable();


if (dataTable.Rows.Count < 1) return;
dataTable.Rows.RemoveAt(dataTable.Rows.Count - 1);
ViewState["dt"] = dataTable;
this.Bind(false);
}

protected void x1_SelectedIndexChanged(object sender, EventArgs e)
{
DropDownList x1 = sender as DropDownList;
GridViewRow r = x1.Parent.Parent as GridViewRow;
dataTable = this.GetDataTable();
dataTable.Rows[r.RowIndex]["usage"] = x1.SelectedValue;
ViewState["dt"] = dataTable;
this.Bind(false);
}

protected void x2_SelectedIndexChanged(object sender, EventArgs e)
{
DropDownList x2 = sender as DropDownList;
GridViewRow r = x2.Parent.Parent as GridViewRow;
dataTable = this.GetDataTable();
dataTable.Rows[r.RowIndex]["steelKind"] = x2.SelectedValue;
ViewState["dt"] = dataTable;
this.Bind(false);
}

protected void x3_TextChanged(object sender, EventArgs e)
{
TextBox x3 = sender as TextBox;
GridViewRow r = x3.Parent.Parent as GridViewRow;
dataTable = this.GetDataTable();
dataTable.Rows[r.RowIndex]["castingTon"] = x3.Text;
ViewState["dt"] = dataTable;
this.Bind(false);
}

protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
if (e.Row.RowIndex < this.GetDataTable().Rows.Count - 1)
{
DropDownList x1 = e.Row.FindControl("x1") as DropDownList;
DropDownList x2 = e.Row.FindControl("x2") as DropDownList;
TextBox x3 = e.Row.FindControl("x3") as TextBox;
x1.AutoPostBack = x2.AutoPostBack = x3.AutoPostBack = true;
x1.SelectedIndexChanged += new EventHandler(x1_SelectedIndexChanged);
x2.SelectedIndexChanged += new EventHandler(x2_SelectedIndexChanged);
x3.TextChanged += new EventHandler(x3_TextChanged);
}
}
}
</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" OnRowDataBound="GridView1_RowDataBound"
OnRowCreated="GridView1_RowCreated">
<Columns>
<asp:TemplateField HeaderText="选择1">
<ItemTemplate>
<asp:DropDownList ID="x1" runat="server">
<asp:ListItem>L0</asp:ListItem>
<asp:ListItem>L1</asp:ListItem>
<asp:ListItem>L2</asp:ListItem>
<asp:ListItem>L3</asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="选择2">
<ItemTemplate>
<asp:DropDownList ID="x2" runat="server">
<asp:ListItem>10#</asp:ListItem>
<asp:ListItem>20#</asp:ListItem>
<asp:ListItem>30#</asp:ListItem>
<asp:ListItem>40#</asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="输入文字">
<ItemTemplate>
<asp:TextBox ID="x3" runat="server"></asp:TextBox>
</ItemTemplate>


</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:LinkButton ID="LinkButton1" runat="server" Text="添加内容" OnClick="LinkButton1_Click"></asp:LinkButton>
<asp:LinkButton ID="LinkButton2" runat="server" Text="删除内容" OnClick="LinkButton2_Click"></asp:LinkButton>
</form>
</body>
</html>

[解决办法]
可以根据条件自动生成

if (ViewState["dt"] == null)
{
DataTable x = ViewState["dt"] as DataTable;
for(int i=0;i<x.Rows.Count;i++)
{
for(int j=0;j<x.Columns.Count;j++)
{
Response.Write (x.Rows[i][j].ToString());
}
}
}

[解决办法]
动态生成

protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DropDownList x1 = e.Row.FindControl("x1") as DropDownList;
DropDownList x2 = e.Row.FindControl("x2") as DropDownList;
x1.DataSource = new String[] { "L0", "L1", "L2", "L3" };
x1.DataBind();

x2.DataSource = new String[] { "10#", "20#", "30#", "40#" };
x2.DataBind();
if (e.Row.RowIndex < this.GetDataTable().Rows.Count - 1)
{
TextBox x3 = e.Row.FindControl("x3") as TextBox;
x1.AutoPostBack = x2.AutoPostBack = x3.AutoPostBack = true;
x1.SelectedIndexChanged += new EventHandler(x1_SelectedIndexChanged);
x2.SelectedIndexChanged += new EventHandler(x2_SelectedIndexChanged);
x3.TextChanged += new EventHandler(x3_TextChanged);
}

}
}


<asp:TemplateField HeaderText="选择1">
<ItemTemplate>
<asp:DropDownList ID="x1" runat="server">
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="选择2">
<ItemTemplate>
<asp:DropDownList ID="x2" runat="server">
</asp:DropDownList>
</ItemTemplate>
[解决办法]
不是 空的,

读书人网 >asp.net

热点推荐