datagrid问题 急

xiaofan_sap 2010-01-16 05:43:29
写了个 datagrid的窗体
但是有个莫名的问题
我在初始化的时候 给 datagrid赋了十行空值,

#region 这个函数的功能就是绑定数据。这里我帮定了十行空数据。
private void DataEmptyBanding()
{
string strQuery = "select * from employees";
DataSet ds = db.GetDataSet(strQuery);
/*追加十行空数据行*/
for(int i=0;i<=9;i++)
{
/*下面的就是绑定一个空行,把它放在上面的ds的末尾*/
DataRow row = ds.Tables[0].NewRow();
row["EmployeeID"] = "";
row["EmployeeName"] = "";
ds.Tables[0].Rows.Add(row);
}
/*帮定datagrid*/
int num= ds.Tables[0].Rows.Count;
DataGrid1.DataSource = ds;
DataGrid1.DataBind();
}
#endregion



但是 在 ItemDataBand事件里 ,我想给模板列中的textbox添加前台事件 ,但 却报错。

int num=((DataSet)DataGrid1.DataSource).Tables[0].Rows.Count;
int dd=DataGrid1.Items.Count;
for(int i=0;i<num;i++)
{ TextBox tbx=new TextBox();
tbx=(TextBox)DataGrid1.Items[i].FindControl("TextBox1"); tbx.Attributes.Add("onkeydown","if(event.keyCode==13) event.keyCode=9"); tbx.Attributes.Add("onblur","showValueFromEmployeeID(this)"); }

for(int i=1;i<num;i++)
{
TextBox tbx=new TextBox();
tbx=(TextBox )DataGrid1.Items[i].FindControl("TextBox2");
tbx.Attributes.Add("onkeydown","if(event.keyCode==13) event.keyCode=9");
//tbx.Attributes.Add("onblur","showNewDataGrid()");
}

我跟踪了一下 发现 int dd=DataGrid1.Items.Count;的值 是 0,不知道为什么 。他不是有十行空数据吗 ?请高手帮小弟 解答
...全文
163 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fb13579 2010-01-18
  • 打赏
  • 举报
回复
楼上正解 正确写 DataGrid1_ItemDataBound 代码
wuyq11 2010-01-16
  • 打赏
  • 举报
回复
private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
((TextBox)e.Item.FindControl("Textbox1")).Attributes.Add("onkeydown", "javascript:if(event.keyCode==13) event.keyCode=9;");
}
}
或使用Itemplate
mngzilin 2010-01-16
  • 打赏
  • 举报
回复
头像不错
ILOVE_ASPNET 2010-01-16
  • 打赏
  • 举报
回复
路过, UP
小_虎 2010-01-16
  • 打赏
  • 举报
回复
如果你要在这个事件中写,应该如下的方法
--------
protected void DataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e)
{
//int num = ((DataTable)DataGrid1.DataSource).Rows.Count;
//int dd = DataGrid1.Items.Count;
//for (int i = 0; i < num; i++)
//{
// TextBox tbx = new TextBox();
// tbx = (TextBox)DataGrid1.Items[i].FindControl("TextBox1"); tbx.Attributes.Add("onkeydown", "if(event.keyCode==13) event.keyCode=9"); tbx.Attributes.Add("onblur", "showValueFromEmployeeID(this)");
//}

//for (int i = 1; i < num; i++)
//{
// TextBox tbx = new TextBox();
// tbx = (TextBox)DataGrid1.Items[i].FindControl("TextBox2");
// tbx.Attributes.Add("onkeydown", "if(event.keyCode==13) event.keyCode=9");
// //tbx.Attributes.Add("onblur","showNewDataGrid()");
//}

if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{

((TextBox)e.Item.FindControl("TextBox1")).Text = 这样才对嘛。。。";
}


}
小_虎 2010-01-16
  • 打赏
  • 举报
回复
控件中的某一项被数据绑定后但尚未呈现在页面上之前发生
这个是ItemDataBand的意思。
  • 打赏
  • 举报
回复
关注中
小_虎 2010-01-16
  • 打赏
  • 举报
回复
楼主应该要懂得这个ItemDataBand事件的意思,
他是绑定一行,绑定一行就执行这个哥事件,也是循环执行的意思。
当你单步执行的时候,也就是触发绑定第一行的时候,
这时候他整个DataGrid还没有数据呢,也就是一行都没绑定数以当然没有数据了。index会报错的。

--
protected void bindcolumns()
{
//这里还是应该用dd来做循环直接
int num=((DataSet)DataGrid1.DataSource).Tables[0].Rows.Count;
int dd = DataGrid1.Items.Count;
for (int i = 0; i < num; i++)
{
TextBox tbx = new TextBox();
tbx = (TextBox)DataGrid1.Items[i].FindControl("TextBox1"); tbx.Attributes.Add("onkeydown", "if(event.keyCode==13) event.keyCode=9"); tbx.Attributes.Add("onblur", "showValueFromEmployeeID(this)");
}

for (int i = 1; i < num; i++)
{
TextBox tbx = new TextBox();
tbx = (TextBox)DataGrid1.Items[i].FindControl("TextBox2");
tbx.Attributes.Add("onkeydown", "if(event.keyCode==13) event.keyCode=9");
//tbx.Attributes.Add("onblur","showNewDataGrid()");
}


}

然后在绑定后数据源后的方法,直接再执行这个方法,就可以了。

DataGrid1.DataSource = dt;
DataGrid1.DataBind();
bindcolumns();

62,254

社区成员

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

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

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

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