<asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="images/new.gif" CssClass="imgbt" OnClick="ImageButton1_Click"/>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" CssClass="gridviewStlye" OnRowDataBound="GridView1_RowDataBound">
<Columns>
<asp:TemplateField HeaderText="NO." InsertVisible="False" >
<ItemTemplate>
<asp:Label id="seq" runat="server" Text="<%# this.GridView1.PageIndex * this.GridView1.PageSize + this.GridView1.Rows.Count + 1 %>" ></asp:Label>
</ItemTemplate>
</asp:TemplateField> <asp:TemplateField HeaderText="项目">
<ItemTemplate>
<asp:TextBox ID="itemnm" runat="server" Text='<%#Eval("itemnm") %>' TextMode="MultiLine" Rows="6"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="加重值">
<ItemTemplate>
<asp:TextBox ID="gradenm" runat="server" Text='<%#Eval("gradenm") %>' ></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="目标">
<ItemTemplate>
<asp:TextBox ID="aimnm" runat="server" Text='<%#Eval("aimnm") %>' TextMode="MultiLine" Rows="6"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="评价方法">
<ItemTemplate>
<asp:TextBox ID="methodnm" runat="server" Text='<%#Eval("methodnm") %>' TextMode="MultiLine" Rows="6"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="flag" ItemStyle-CssClass="noDis" HeaderStyle-CssClass="noDis"/>
</Columns>
</asp:GridView>
</div>
protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
DataTable tb = (DataTable)ViewState["tb"];
DataRow dr = tb.NewRow();
dr[0] = 0;
dr[1] = "";
dr[2] = 0;
dr[3] = "";
dr[4] = "";
dr[5] ="new"; tb.Rows.Add(dr);
GridView1.DataSource = tb;
GridView1.DataBind();
}点击能增加行,但是如果增加一行,在这行中填写了数据,再点增加按钮,前面那行写的内容就不见了,怎么修改能随时增加行,但之前写的内容还在的?
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" CssClass="gridviewStlye" OnRowDataBound="GridView1_RowDataBound">
<Columns>
<asp:TemplateField HeaderText="NO." InsertVisible="False" >
<ItemTemplate>
<asp:Label id="seq" runat="server" Text="<%# this.GridView1.PageIndex * this.GridView1.PageSize + this.GridView1.Rows.Count + 1 %>" ></asp:Label>
</ItemTemplate>
</asp:TemplateField> <asp:TemplateField HeaderText="项目">
<ItemTemplate>
<asp:TextBox ID="itemnm" runat="server" Text='<%#Eval("itemnm") %>' TextMode="MultiLine" Rows="6"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="加重值">
<ItemTemplate>
<asp:TextBox ID="gradenm" runat="server" Text='<%#Eval("gradenm") %>' ></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="目标">
<ItemTemplate>
<asp:TextBox ID="aimnm" runat="server" Text='<%#Eval("aimnm") %>' TextMode="MultiLine" Rows="6"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="评价方法">
<ItemTemplate>
<asp:TextBox ID="methodnm" runat="server" Text='<%#Eval("methodnm") %>' TextMode="MultiLine" Rows="6"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="flag" ItemStyle-CssClass="noDis" HeaderStyle-CssClass="noDis"/>
</Columns>
</asp:GridView>
</div>
protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
DataTable tb = (DataTable)ViewState["tb"];
DataRow dr = tb.NewRow();
dr[0] = 0;
dr[1] = "";
dr[2] = 0;
dr[3] = "";
dr[4] = "";
dr[5] ="new"; tb.Rows.Add(dr);
GridView1.DataSource = tb;
GridView1.DataBind();
}点击能增加行,但是如果增加一行,在这行中填写了数据,再点增加按钮,前面那行写的内容就不见了,怎么修改能随时增加行,但之前写的内容还在的?
DataTable tb = (DataTable)ViewState["tb"];
DataRow dr = tb.NewRow();
dr[0] = 0;
dr[1] = "";
dr[2] = 0;
dr[3] = "";
dr[4] = "";
dr[5] ="new";
tb.Rows.Add(dr);
ViewState["tb"]=tb;
这样也不行的,可能我还没说得清楚,还有个方法是
protected void show_data()
{ string str = " select id ,itemnm,gradenm,aimnm,methodnm,'old' flag from ttable"; DataTable tb = new DataTable();
...................
ViewState["tb"] = tb;
GridView1.DataSource = tb;
GridView1.DataKeyNames = new string[] { "id" };
GridView1.DataBind();
} protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
show_data();
}
}
现在还是如果是新增加一行后,填写内容,没有保存到数据库,然后再点击填写一行,之前填写一行就内容没了,如果是先保存到数据库中,再点击新增加一行,那么内容肯定是在的
{
DataTable tb = (DataTable)ViewState["tb"];
int deli = 0, deli1 = 0; for (int i = 0; i < GridView1.Rows.Count; i++)
{
TextBox itemnm1 = (TextBox)GridView1.Rows[i].FindControl("itemnm");
TextBox gradenm1 = (TextBox)GridView1.Rows[i].FindControl("gradenm");
TextBox aimnm1 = (TextBox)GridView1.Rows[i].FindControl("aimnm");
TextBox methodnm1 = (TextBox)GridView1.Rows[i].FindControl("methodnm");
if (GridView1.Rows[i].Cells[5].Text.Trim() == "new")
{
if (deli1 == 0)
{
deli = i;
}
deli1++; tb.Rows[deli].Delete();
DataRow dr1 = tb.NewRow();
dr1[0] = 0;
dr1[1] = itemnm1.Text;
dr1[2] = gradenm1.Text;
dr1[3] = aimnm1.Text;
dr1[4] = methodnm1.Text;
dr1[5] = "new"; tb.Rows.Add(dr1);
}
}
DataRow dr = tb.NewRow();
dr[0] = 0;
dr[1] = "";
dr[2] = 0;
dr[3] = "";
dr[4] = "";
dr[5] ="new"; tb.Rows.Add(dr);
GridView1.DataSource = tb;
GridView1.DataBind();
}改成这样好象可以