GridView、Datalist中使用FindControl
来源:互联网 发布:java扫雷小游戏源代码 编辑:程序博客网 时间:2024/06/02 02:34
最近用到FindControl和GridView,整理了一下几种使用方法。
1、在选择(SelectedIndexChanged)事件中使用
//获得被选择行的TextBox1
protected void gv1_SelectedIndexChanged(object sender, EventArgs e)
{
//Control c = this.gv1.Rows[this.gv1.SelectedIndex].FindControl("TextBox1");
//TextBox tb = (TextBox)c;
//tb.Text = "TextBox";
TextBox tb = (TextBox)this.gv1.Rows[this.gv1.SelectedIndex].FindControl("TextBox1");
tb.Text = "hello";
}
2、在编辑行(RowEditing)事件中使用
//编辑行时,找到TextBox1
protected void gv1_RowEditing(object sender, GridViewEditEventArgs e)
{
//设置要编辑行的索引
gv1.EditIndex = e.NewEditIndex;
GridViewBind();
TextBox tb = (TextBox)this.gv1.Rows[e.NewEditIndex].FindControl("TextBox1");
Response.Write(tb.Text);
}
3、在取消编辑行(RowCancelingEdit)事件中使用
//取消编辑时,找到TextBox1
protected void gv1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
TextBox tb = (TextBox)this.gv1.Rows[e.RowIndex].FindControl("TextBox1");
Response.Write(tb.Text);
gv1.EditIndex = -1;
GridViewBind();
}
4、在行绑定(RowDataBound)事件中使用
//获得行数据绑定中的TextBox1
protected void gv1_RowDataBound(object sender, GridViewRowEventArgs e)
{
// 对于在RowDataBound中Find,可以用if (e.Row.RowType == DataControlRowType.DataRow)来限制Find的范围,因为Find默认是在HeaderTemplate中找,如果不限定范围,在HeaderTemplate中找不到,自然就返回null,然后就出错了,DataControlRowType枚举中的DataRow确定是数据行.
//if (e.Row.RowType == DataControlRowType.DataRow)
//{
// TextBox tb = (TextBox)e.Row.FindControl("TextBox1");
// tb.Text = "databind";
//}
//如果在DataGrid的页眉和页脚:
//if (e.Row.RowType == DataControlRowType.Header)
//{
// TextBox tbheader = (TextBox)e.Row.FindControl("txtHeader");
// tbheader.Text = "Head";
//}
((TextBox)this.gv1.Controls[0].Controls[0].FindControl("txtHeader")).Text = "Head";
if (e.Row.RowType == DataControlRowType.Footer)
{
TextBox tbfooter = (TextBox)e.Row.FindControl("txtFooter");
tbfooter.Text = "Footer";
}
}
5、在行命令(RowCommand)事件中使用
//行命令时间中找到TextBox1
//如果使用GridView默认的模式,e.CommandArgument自动棒定为该行的Index,这时候只要指定gridview1.Rows[Convert.ToInt32(e.CommandArgument)].FindControl("xxx")就可以了,但是如果转化为Template,e.CommandArgument并不会自动绑定任何值,需要手动绑定,可以在<ItemTemplate></ItemTemplate>手动写CommandArgument="<%# ((GridViewRow) Container).RowIndex %>",把这个行的 Index绑定绑定到该e.CommandArgument就可以了.
protected void gv1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName.ToLower() == "change")
{
TextBox tb = (TextBox)this.gv1.Rows[Convert.ToInt32(e.CommandArgument)].FindControl("TextBox1");
Response.Write(tb.Text);
}
}
6、OnRowDeleting事件
为gridview“删除”列添加确认对话框?
1、继承Web.IO里的button控件,为其实现一个IPostback的接口用于回调,具体代码复杂
2、在gridview的ItemCreated事件中,遍历所有控件,若属于LinkButton类,且CommandName为“Delete”,
就将其添加一个属性,具体做法是将遍历到的Control强制类型转化为LinkButton,然后调用其Atributes.Add方法,
添加一个onclick事件内含confirm语句,即
lb.Attributes.Add("onclick", "return confirm('您真的要删除此行吗?')");
3、在删除按钮的那一列属性里面,把DeleteText属性设为
<div id="de" onclick="javascript:return confirm('确定删除吗?')">删除</div>
aspx:
<asp:GridView ID="gv" OnRowDeleting="gv_OnRowDeleting" DataKeyNames="字段" runat="server">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="delall" runat="server" /> /*内嵌checkbox*/
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField DeleteText="<div id="de" onclick="javascript:return confirm('确定删除吗?')">删除</div> "ShowDeleteButton="True" /> /*DeleteText 删除对话框*/
</Columns>
</asp:GridView>
<asp:Button ID="btnAll" runat="server" Text="全选" onClick="btnAll_Click" />
<asp:Button ID="btnDelall" runat="server" Text="选定删除" onClick="btnDelall_Click" />
cs:
protected void gv_OnRowDeleting(object sender, GridViewDeleteEventArgs e) //gridview删除
{
Name = gv.DataKeys[e.RowIndex].value.ToString(); //gridview's DataKeyNames
string delsql = "delete from table where 字段 = '"+ Name +"' ";
try
{
SQLHelper.ExecuteNonQuery(delsql);
Response.Write("<script>alert('删除成功!')</script>");
}
catch (Exception ex)
{
Response.Write("<script language='javascript'>alert('" + ex.Message + "');</script>");
}
finally
{
this.gv.EditIndex = -1;
this.gvbind();
}
}
//批量删除 start
protected void btnAll_Click(object sender, EventArgs e)
{
CheckBox cb;
if (btnAll.Text == "全选")
{
for (int i = 0; i < gv.Rows.Count; i++)
{
cb = (CheckBox)gv.Rows[i].Cells[0].FindControl("delall");
cb.Checked = true;
}
btnAll.Text = "取消";
}
else
{
for (int i = 0; i < gv.Rows.Count; i++)
{
cb = (CheckBox)gv.Rows[i].Cells[0].FindControl("delall");
cb.Checked = false;
}
btnAll.Text = "全选";
}
}
protected void btnDelall_Click(object sender, EventArgs e)
{
string delallsql = "delete from table where ";
string cal = "";
for (int i = 0; i < gv.Rows.Count; i++)
{
CheckBox cb = (CheckBox)gv.Rows[i].Cells[0].FindControl("delall");
if (cb.Checked == true)
{
cal += " 字段 ='" + gv.DataKeys[i].value.ToString() + "' or";
}
}
if (cal != "")
{
delallsql += cal.Substring(0, cal.Length - 3);
}
else
{
delallsql = "";//不删除
for (int i = 0; i < gv.Rows.Count; i++)
{
CheckBox cb = (CheckBox)gv.Rows[i].Cells[0].FindControl("delall");
cb.Checked = false;
}
}
try
{
SQLHelper.ExecuteNonQuery(delallsql);
Response.Write("<script>alert('删除成功!')</script>");
}
catch (Exception ex)
{
Response.Write("<script language='javascript'>alert('" + ex.Message + "');</script>");
}
finally
{
for (int i = 0; i < gv.Rows.Count; i++)
{
CheckBox cb = (CheckBox)gv.Rows[i].Cells[0].FindControl("delall");
cb.Checked = false;
}
this.gv.EditIndex = -1;
this.gvbind();
}
}
//批量删除 end
其他事件中的使用,和上面列举的类似
附上,前台代码:UseTest3.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="UseTest3.aspx.cs" Inherits="UseTest3" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="gv1" runat="server" AutoGenerateColumns="False" OnSelectedIndexChanged="gv1_SelectedIndexChanged" OnRowEditing="gv1_RowEditing" OnRowDataBound="gv1_RowDataBound" ShowFooter="True" OnRowCommand="gv1_RowCommand" DataKeyNames="employeeid" OnRowCancelingEdit="gv1_RowCancelingEdit">
<Columns>
<asp:TemplateField>
<HeaderTemplate>
<asp:TextBox ID="txtHeader" runat="Server"></asp:TextBox>
</HeaderTemplate>
<ItemTemplate>
<asp:TextBox ID="TextBox1" Text='<%# Bind("employeeid")%>' runat="server"></asp:TextBox>
</ItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtFooter" runat="server"></asp:TextBox>
</FooterTemplate>
</asp:TemplateField>
<asp:BoundField DataField="lastname" HeaderText="LastName" />
<asp:BoundField DataField="firstname" HeaderText="FirstName" />
<asp:ButtonField CommandName="select" Text="选择" />
<asp:ButtonField CommandName="change" Text="change" />
<asp:CommandField ShowEditButton="True" />
</Columns>
</asp:GridView>
</div>
</form>
</body>
</html>
参考资料
qdzx2008的专栏
在GridView中使用FindControl
http://blog.csdn.net/qdzx2008/archive/2009/09/16/4558388.aspx
应用范例:
aspx
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="id"
DataSourceID="SqlDataSource1" OnRowDataBound="GridView_OnRowDataBound">
<Columns>
<asp:TemplateField HeaderText="标题">
<ItemTemplate>
<asp:HiddenField ID="HiddenField_id" runat="server" value='<%# Eval("id") %>' />
<asp:Repeater ID="Repeater2" runat="server" DataSourceID="SqlDataSource2">
<ItemTemplate>
<%# Eval("title") %>
</ItemTemplate>
</asp:Repeater>
<!-- 关联对应的一条数据,数据源应放在这里 -->
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:database_ConnectionString %>"
SelectCommand="SELECT * FROM [db] WHERE ([id] = @id)">
<SelectParameters>
<asp:QueryStringParameter Name="id" QueryStringField="id" Type="Int32" />
</SelectParameters>
</asp:SqlDataSource>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
aspx.cs
using System;
using System.Web.UI.WebControls;
public partial class item : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void GridView_OnRowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
SqlDataSource SqlDataSource2= (SqlDataSource)e.Row.FindControl("SqlDataSource2");
HiddenField HiddenField_id = (HiddenField)e.Row.FindControl("HiddenField_id");
SqlDataSource2.SelectParameters["id"].Defaultvalue = HiddenField_id.value;
}
}
}
或者
protected void DataList_OnItemDataBound(object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item)
{
SqlDataSource SqlDataSource3 = (SqlDataSource)e.Item.FindControl("SqlDataSource3");
HiddenField HiddenField3 = (HiddenField)e.Item.FindControl("HiddenField3");
SqlDataSource3.SelectParameters["id"].Defaultvalue = HiddenField3.value;
}
}
- GridView、Datalist中使用FindControl
- 在GridView中使用FindControl
- 在GridView中使用FindControl
- 在GridView中使用FindControl
- 在GridView中使用FindControl
- 母版页中使用FindControl,后台使用FindControl查找Span
- gridview,datalist,repeater控件使用
- asp.net gridview.findcontrol
- repeater控件中使用FindControl寻找控件
- datalist / gridview
- 关于GridView或DataList中命令按钮
- GridView中使用类似于Button btnToped = (Button)e.Row.FindControl("btnToped");提示“未将对象引用到实例”,也就是找不到控件的问题的解决方法
- ASP.NET 2.0中DataList控件与GridView控件的使用实例
- GridView的时候用到FindControl()在TemplateField中发现总是Find不到
- c#中DataList的使用
- easyUI中DataList的使用
- FindControl();
- FindControl()
- 如何修改Gridview中HeaderTemplate中控件的值
- linux操作oracle的常用命令
- 04-字符串转换成数组(字符串处理)
- Spring攻略笔记-2 依赖检查
- Android动画之Interpolator插补器
- GridView、Datalist中使用FindControl
- 编译mtk的android工程,会出现如图所示的错误: undefined reference to “
- Silverlight + DomainService 简易框架之一 完成增删改操作
- FlashBurn 如何工作
- 守护线程总结
- Ewebeditor 的一些漏洞总结
- blog之登录
- 400交换机呼叫中心的知识
- asp.net获取当前页面文件名,参数,域名等方法。统一session验证和权限验证的方法