你的onitemdatabound事件没有参数的吗?
应该是databind()先执行。
应该是databind()先执行。
解决方案 »
- 求asp.net操作word代码片和解析
- GridView中的一些小问题?
- 关于asp.net用户控件的问题
- 问一个复杂的SQL语句,不是高手不要进哦!
- |M|我在看VS2005的示例的时候看到他在VS2005里面创建数据库 ,然后我也创建了一个DB.mdb 但我在我的SQL里面找不到这个数据库
- 服务器标记的格式不正确。
- 在session_end事件中是不是可以取得用户最后访问的页面?
- 怎样用asp.net画直线啊!
- 怎么把数据从数据库里读出来,放到文本框里?
- 巨奇怪的问题 出现在 SQL Server 不存在或访问被拒绝!
- 怎样把数据库的记录内容直接变成WEB页面
- 如何通过一个Setup.exe的可执行文件就能将.Net Framework、虚拟目录设置和WEB程序一起安装呢??
你所出的错误是因为第一次执行时当时的行不是第一行,要加入如下语句:
if(e.Item.ItemIndex >= 0)
{
//你的语句
}
事实上我的MyDataBound(....)里是有参数的。
to shuncy(天才笨蛋):
如果是DataGrid1.DataBiund()先运行,MyDataBound在后,我便可以得到:
str=((TextBox)DataGrid1.Item[0].Cells[0].Control[1]).Text;且无须加上if(e.Item.ItemIndex>=0)这个条件呀?事实上,我加了后,错误同上。
完成数据绑定后,这时就触发了itemdatabound事件,在itemdatabound事件里,提供了我们访问datagrid的数据源的最后的机会,在itemcreated和itemdatabound事件里,我们可以通过(DataRowView)(e.Item .DataItem),把e.Item..DataItem强制转换成DataRowView对象,然后我们就可以访问该数据源了
如果是ItemDataBound事件里的话datagrid.item不是一个数组。如下
String str=((TextBox)DataGrid1.Item.Cells[0].Control[1]).Text;
((TextBox)DataGrid.Item.Cells[0].Control[1]).Text,能成立吗?
好像没有Item属性吧,只有Items.
代码如下:
html:
<asp:datagrid id="DataGrid" .... OnItemDataBound="MyDataBound">
<Columns>
<asp:TemplateColumn> <ItemTemplate> <asp:TextBox Width="59" BorderWidth="0" Runat="server" ID="box1" Text='<%# DataBinder.Eval(Container.DataItem,"stor_id")%>' onkeydown="test()">
</asp:TextBox>
</ItemTemplate>
</asp:TemplateColumn> <asp:TemplateColumn> <ItemTemplate> <asp:TextBox Width="156px" BorderWidth="0" Runat="server" ID="box2" Text='<%# DataBinder.Eval(Container.DataItem,"stor_address")%>' onkeydown="test()"> </asp:TextBox> </ItemTemplate> </asp:TemplateColumn> <asp:TemplateColumn> <ItemTemplate> <asp:TextBox Width="165px" BorderWidth="0" Runat="server" ID="box3" Text="0" onkeydown="test()" ReadOnly="True"></asp:TextBox> </ItemTemplate> </asp:TemplateColumn> </Columns>
</asp:datagrid>cs:
public void DataBoundHello(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
for(int i=0;i<dt.rows.count;i++)
{
//报错的原因是下面一条语句:
count+=int.parse(((TextBox)this.DataGrid1.Items[i].Cells[2].Controls[1]).Text);
}
this.TextBox_total.Text=count.tostring();
}
在page_load()下加入如下代码:
if(!IsPostBack)
{
this.DataGrid1.DataSource=dt;
this.DataGrid1.DataBind();
Response.write("This is DataBind");
}
在MyDataBound(....)中写下如下代码:
{
Response.write("This is DataBound");
}
运行,我们会发现输出如下:
This is DataBound
This is DataBound
This is DataBound
...
This is DataBind
由上可知:
DataBind()方法在DataBound之后执行,这也是为什么我在下面取不到数据的原因。
string str=((TextBox)this.DataGrid1.Items[i].Cells[2].Controls[1]).Text;
在
string str=((TextBox)this.DataGrid1.Items[i].Cells[2].Controls[1]).Text;
应该写成:
string str=DataBinder.Eval(e.Item.DataItem,"要取的字段名");我认为OnItemDataBound事件是由DataBind()来触发的,即先执行DataBind()再引发OnItemDataBound事件(个人意见)