你的问题不是“屏避原来添加的记录”,而是postback的问题()
if (!Page.IsPostBack)
{
Session["yourtable"]=aaa;//aaa is you datatable
}else
{
aaa=(DataTable)Session["yourtable"];
}
if (!Page.IsPostBack)
{
Session["yourtable"]=aaa;//aaa is you datatable
}else
{
aaa=(DataTable)Session["yourtable"];
}
<html> <script language="C#" runat="server">
DataTable Cart = new DataTable();
DataView CartView;
void Page_Load(Object sender, EventArgs e)
{
DataRow dr;
if (Session["ShoppingCart"] == null)
{
Cart.Columns.Add(new DataColumn("Qty", typeof(String)));
Cart.Columns.Add(new DataColumn("Item", typeof(String)));
Cart.Columns.Add(new DataColumn("Price", typeof(String)));
Session["ShoppingCart"] = Cart;
// Create some rows and insert some sample data.
for (int i = 1; i <= 4; i++)
{
dr = Cart.NewRow();
if (i % 2 != 0)
dr[0] = "2";
else
dr[0] = "1";
dr[1] = "Item " + i.ToString();
dr[2] = (1.23 * (i + 1)).ToString();
Cart.Rows.Add(dr);
}
}
else
Cart = (DataTable)Session["ShoppingCart"];
CartView = new DataView(Cart);
CartView.Sort="Item";
if (!IsPostBack)
BindGrid();
}
void MyDataGrid_Edit(Object sender, DataGridCommandEventArgs e)
{
MyDataGrid.EditItemIndex = e.Item.ItemIndex;
BindGrid();
}
void MyDataGrid_Cancel(Object sender, DataGridCommandEventArgs e)
{
MyDataGrid.EditItemIndex = -1;
BindGrid();
}
void MyDataGrid_Update(Object sender, DataGridCommandEventArgs e)
{
// For bound columns, the edited value is stored in a TextBox.
// The TextBox is the 0th element in the column's cell.
TextBox qtyText = (TextBox)e.Item.Cells[2].Controls[0];
TextBox priceText = (TextBox)e.Item.Cells[3].Controls[0];
String item = e.Item.Cells[1].Text;
String qty = qtyText.Text;
String price = priceText.Text;
DataRow dr;
// With a database, use an update command to update the data. Because
// the data source in this example is an in-memory DataTable, delete the
// old row and replace it with a new one. // Remove old entry.
CartView.RowFilter = "Item='" + item + "'";
if (CartView.Count > 0)
CartView.Delete(0);
CartView.RowFilter = "";
// Add new entry.
dr = Cart.NewRow();
dr[0] = qty;
dr[1] = item;
dr[2] = price;
Cart.Rows.Add(dr);
MyDataGrid.EditItemIndex = -1;
BindGrid();
}
void BindGrid()
{
MyDataGrid.DataSource = CartView;
MyDataGrid.DataBind();
}
</script>
<body>
<form runat="server"> <h3>DataGrid Editing Example</h3>
<asp:DataGrid id="MyDataGrid" runat="server"
BorderColor="black"
BorderWidth="1"
CellPadding="3"
Font-Name="Verdana"
Font-Size="8pt"
OnEditCommand="MyDataGrid_Edit"
OnCancelCommand="MyDataGrid_Cancel"
OnUpdateCommand="MyDataGrid_Update"
AutoGenerateColumns="false"> <HeaderStyle BackColor="#aaaadd">
</HeaderStyle>
<Columns>
<asp:EditCommandColumn
EditText="Edit"
CancelText="Cancel"
UpdateText="Update"
HeaderText="Edit Command Column"> <ItemStyle Wrap="false">
</ItemStyle> <HeaderStyle Wrap="false">
</HeaderStyle> </asp:EditCommandColumn>
<asp:BoundColumn HeaderText="Item" ReadOnly="true" DataField="Item"/>
<asp:BoundColumn HeaderText="Quantity" DataField="Qty"/>
<asp:BoundColumn HeaderText="Price" DataField="Price"/>
</Columns>
</asp:DataGrid>
</form>
</body>
</html>
这是MS的help,你可以参考一下,先用dataview来保存,最后在update DB
if not ispostpack then
session("dataset") = _my_data_set //这里换成dataset也可以吧!
else
_my_data_set = session("dataset")
end if
是这样的吗?
而且问题2 如何解决呢!dongchuanlu(匡奇) 再帮小弟一把!
在button_onclick事件中
_my_data_adapter.Update(_my_data_set, "study")
Datagrid1.DataSource = _my_data_set
Datagrid1.DataBind()
可是报错说:当传递具有新行的 DataRow 集合时,更新要求有效的 InsertCommand。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.InvalidOperationException: 当传递具有新行的 DataRow 集合时,更新要求有效的 InsertCommand。源错误:
行 86:
行 87: Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
行 88: _my_data_adapter.Update(_my_data_set, "study")//错的地方
行 89: Datagrid1.DataSource = _my_data_set
行 90: Datagrid1.DataBind()
源文件: E:\xagdj\tt\WebKf.aspx.vb 行: 88
sqldataadpter.selectcommand = command;关联到command;
定义一个commandbuilder,然后
commandbuilder.dataadpter = sqldataadpter关联到sqldataadpter
然后用sqldataadpter.fill(dataset,table)填充至表,
然后修改表中的数据最后用dataadpter.update()将修改后的数据提交至数据库。
在上述过程中,command对象不可再做其他的数据库操作。
查一下书书上都应有的。
我的保存回数据库的update
不是放在添加中一步完成的,
我放在另一个按钮的奠基事件中完成,
该怎么办呢?
报错为:
当传递具有新行的 DataRow 集合时,更新要求有效的 InsertCommand。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.InvalidOperationException: 当传递具有新行的 DataRow 集合时,更新要求有效的 InsertCommand。源错误:
行 86:
行 87: Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
行 88: _my_data_adapter.Update(_my_data_set, "study")//错的地方
行 89: Datagrid1.DataSource = _my_data_set
行 90: Datagrid1.DataBind()
源文件: E:\xagdj\tt\WebKf.aspx.vb 行: 88
帮忙呀!
datarow dd = dataset.table[0].newrow();
然后
dataset.table[0].rows.add(dd);