datatable 中增加一行.

coffeewar 2004-06-16 09:31:15
想做一个输入的界面,请大家给个思路。

我是想通过一个button 的 click事件在 datatable 中增加一行,然后绑定到 datagrid 中,再将该行设置为 edit 。但 button 的click事件激发后, dataTable.NewRow时发生错误(“未将对象引用设置到对象的实例”)代码如下:

namespace fushi.manages
{
/// <summary>
/// adddep 的摘要说明。
/// </summary>
public class adddep : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button add;
protected System.Web.UI.WebControls.DataGrid DataGrid1;
protected DataTable dt;
protected DataView dv;

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!Page.IsPostBack )
{
this.createDv ();
}

}
private void createDv()
{
dt=new DataTable ();
DataColumn dc=new DataColumn ("关键词",typeof(System.String ));
dt.Columns.Add (dc);
dc=new DataColumn ("长度",typeof(Int32));
dt.Columns .Add (dc);
dc=new DataColumn ("布尔型选项",typeof(System.String ));
dt.Columns .Add (dc);
}
private void bindtype()
{
Hashtable ht=new Hashtable ();
ht.Add (1,"字符串型");
ht.Add (2,"整型");
foreach(System.Web .UI .WebControls .DataGridItem item in DataGrid1.Items )
{
DropDownList dp=(DropDownList)item .FindControl ("keytype");
dp.DataSource =ht;
dp.DataTextField ="value";
dp.DataValueField ="key";
dp.DataBind ();
}

}


#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.add.Click += new System.EventHandler(this.add_Click);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void add_Click(object sender, System.EventArgs e)
{
DataRow dr=dt.NewRow (); //错误(“未将对象引用设置到对象的实例”
// dt.Rows .InsertAt (dr,0);
dt.Rows .Add (dr);
dv=dt.DefaultView ;
this.DataGrid1 .DataSource =dv;
this.DataGrid1 .DataBind ();
this.bindtype ();

}
}
}
...全文
236 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
goody9807 2004-06-17
  • 打赏
  • 举报
回复
if(!Page.IsPostBack )

wu896222 2004-06-17
  • 打赏
  • 举报
回复
coffeewar,
用javascript在客户端增加的Datagrid行,不会记录在Datagrid的viewstate中,故页面刷新的时候服务器端得不到值,所以就没了.
我的解决的办法是不要让页面刷新,将Datagrid的每一行值写到一个textbox中.
coffeewar 2004-06-16
  • 打赏
  • 举报
回复
thank you
wu896222 2004-06-16
  • 打赏
  • 举报
回复
coffeewar,
你可以参考这个做,我以前是用你目前这个思路来实现这个功能,后改为用javascript.
http://dev.csdn.net/article/28/28446.shtm
coffeewar 2004-06-16
  • 打赏
  • 举报
回复
有例子吗
wu896222 2004-06-16
  • 打赏
  • 举报
回复
不赞成,这样的思路页面效率太低.用javascript吧.
coffeewar 2004-06-16
  • 打赏
  • 举报
回复
我想把添加进去的行设为编辑行 DataGrid1.EditItemIndex该怎样设置?
coffeewar 2004-06-16
  • 打赏
  • 举报
回复
谢谢大家,这个我懂了。

再请各位虾谈谈你们平时是怎么做输入的,我这样的思路正确吗?
dbase 2004-06-16
  • 打赏
  • 举报
回复
button_click之后回发,这时候没有数据源了;)
saucer 2004-06-16
  • 打赏
  • 举报
回复
you need to save the datatable somewhere

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!Page.IsPostBack )
{
this.createDv ();
Session["Data"] = dt;
}
else
dt = (DataTable)Session["Data"];

}
smoothwood 2004-06-16
  • 打赏
  • 举报
回复
你点按钮之后dt就没有了,因为你是写在!PostBack中的~~

你Datagrid中的数据是通过视图状态保存下来的,但是dt不会被保存
coffeewar 2004-06-16
  • 打赏
  • 举报
回复
晕,原来是问题在这里 if(!Page.IsPostBack )
{
this.createDv ();
}

去掉 if(!Page.IsPostBack )就可以了


coffeewar 2004-06-16
  • 打赏
  • 举报
回复
to:wu896222
我现在是用你介绍的思路做的,差不多了,可为什么一刷新就没了呢

62,067

社区成员

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

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

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

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