注意:我不是在gridview的事件里写代码,所以,象e.rowindex之类的无法用,我是在按钮的onclick中取当前行。protected void btnSelect1_Click(object sender, EventArgs e)
{
GridViewRow MyRow = GridView1.SelectedRow; //为什么MyRow是null呢? ((TextBox)MyRow.FindControl("edtWpbh")).Text ="123"HdfWpbh.Value;
}
}我这个按钮放在gridview中。点击它时想取得当前行。
{
GridViewRow MyRow = GridView1.SelectedRow; //为什么MyRow是null呢? ((TextBox)MyRow.FindControl("edtWpbh")).Text ="123"HdfWpbh.Value;
}
}我这个按钮放在gridview中。点击它时想取得当前行。
这样得到行Index
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
LinkButton lbView = (LinkButton)e.Row.FindControl("BtnView");
if (lbView != null)
{
lbView.CommandArgument = e.Row.RowIndex.ToString();
}//这样执行操作(点击button的操作)
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "BtnView")
{
string id = this.GridView1.DataKeys[Convert.ToInt32(e.CommandArgument.ToString())].Value.ToString();
ClientScript.RegisterStartupScript(ClientScript.GetType(), "myscript", "<script>btview('" + id.Trim() + "');</script>");
}
通过LinkButton的CommandArgument 来获取点击按钮的行号如果你用的是GridView里自带的ButtonField的话
你编写GridView的RowCommand事件
如下:
string aaa = e.CommandName.ToString();
if (aaa.Equals("button"))
{
int aab = int.Parse(e.CommandArgument.ToString());
}
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="Button1" runat="server" Text="Button" CommandArgument=" <%#Container.DataItemIndex %>"/>
</ItemTemplate>
</asp:TemplateField> protected void btnSelect1_Click(object sender, EventArgs e)
{
(Button)bt=(Button)sender;
int i=(int)bt.CommandArgument; ((TextBox)this.GrideView1.Rows[i].FindControl("edtWpbh")).Text ="123"HdfWpbh.Value;
}
}
(Button)bt=(Button)sender; //出错:上下文中不存在btn
例如点击了当前行是个LinkButton
protected void LinkButton1_Command(object sender, CommandEventArgs e)
{
LinkButton lb = (LinkButton)sender;
DataControlFieldCell dcf = (DataControlFieldCell)lb.Parent;
GridViewRow gvr = (GridViewRow)dcf.Parent;
GridView1.SelectedIndex = gvr.RowIndex;
}
vs2003中:
例如点击了当前行是个DropDownList
private void DropDownList1_SelectedIndexChanged(object sender, System.EventArgs e)
{
DataGridItem di = (sender as DropDownList).Parent.Parent as DataGridItem;
int index = Convert.ToInt32(di.ItemIndex);
}
//有人会问了,为什么有两个Parent呢?
//第一个Parent是指DropDownList所在的单元格,第二个Parent就是指DropDownList所在的行了
例如点击了当前行是个LinkButton
protected void LinkButton1_Command(object sender, CommandEventArgs e)
{
LinkButton lb = (LinkButton)sender;
DataControlFieldCell dcf = (DataControlFieldCell)lb.Parent;
GridViewRow gvr = (GridViewRow)dcf.Parent;
GridView1.SelectedIndex = gvr.RowIndex;
}
vs2003中:
例如点击了当前行是个DropDownList
private void DropDownList1_SelectedIndexChanged(object sender, System.EventArgs e)
{
DataGridItem di = (sender as DropDownList).Parent.Parent as DataGridItem;
int index = Convert.ToInt32(di.ItemIndex);
}
//有人会问了,为什么有两个Parent呢?
//第一个Parent是指DropDownList所在的单元格,第二个Parent就是指DropDownList所在的行了
int index = Convert.ToInt32(button.CommandArgument); 这里有改动 这样不会报错的还有 我只是改动下lcl_8318的代码 对于楼主的需求我没太明白.....
<ItemTemplate>
<asp:Button ID="Button1" runat="server" Text="Button" CommandName=" select">
</ItemTemplate>
</asp:TemplateField>
在点击此按钮会触发selecgindexchanging事件,在事件中写e.RowIndex就行了