GridView获取行号和列号

yinhunfeixue 2010-02-07 09:31:47
<asp:GridView ID="gridView" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:TemplateField ShowHeader="False">
<ItemTemplate>
<asp:Button ID="LinkButton1" runat="server" CausesValidation="false" OnClick="Test"
CommandName="" Text='<%#Eval("name") %>' />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>


protected void Test(object sender, EventArgs e)
{
//在这里怎么获取sender所在的行号和列号.
}

问题请看注释
...全文
1220 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
yinhunfeixue 2010-03-03
  • 打赏
  • 举报
回复
我搞定了,谢谢各位。
likevs 2010-02-10
  • 打赏
  • 举报
回复
引用 14 楼 yinhunfeixue 的回复:
引用 11 楼 likevs 的回复:太简单了 循环一遍控件,好像是以DataRow对象吧 判断是首模板或者底模板或者中间分隔模板,或者最常用的内容模板,然后取对象属性

循环太浪费资源了,还是少用比较好。。。。
谢谢。



哈,不好意思,当时没注意看你上面的代码,原来是一个按钮呀,你说得对,循环浪费资源.

其它老大的方法都不错,我看了下,10楼的最是直接
likevs 2010-02-08
  • 打赏
  • 举报
回复
太简单了

循环一遍控件,好像是以DataRow对象吧

判断是首模板或者底模板或者中间分隔模板,或者最常用的内容模板,然后取对象属性
polarissky 2010-02-08
  • 打赏
  • 举报
回复
其实使用CommandName也可以:
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="AddButton" runat="server"
CommandName="AddToCart"
CommandArgument="<%# ((GridViewRow) Container).RowIndex %>"
Text="Add to Cart" />
</ItemTemplate>
</asp:TemplateField>

protected void GridView1_RowCommand(object sender, 
GridViewCommandEventArgs e)
{
if (e.CommandName == "AddToCart")
{
// Retrieve the row index stored in the
// CommandArgument property.
int index = Convert.ToInt32(e.CommandArgument);

// Retrieve the row that contains the button
// from the Rows collection.
GridViewRow row = GridView1.Rows[index];

// Add code here to add the item to the shopping cart.
}
}

  • 打赏
  • 举报
回复
[Quote=引用 2 楼 kingboy2008 的回复:]
C# codeprotectedvoid Test(object sender, EventArgs e)
{
Button btn= (Button)sender;int i= ((GridViewRow)btn.NamingContainer).RowIndex;//获得行号int j= Convert.ToInt16(GridView1.DataKeys[i].V?-
[/Quote]

up
jack15850798154 2010-02-08
  • 打赏
  • 举报
回复
看看对你有帮助吗??
jack15850798154 2010-02-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yinhunfeixue 的回复:]
引用 1 楼 wuyq11 的回复:
Button btn= (Button)sender;
int i= ((GridViewRow)btn.NamingContainer).RowIndex;//获得行号
int j= Convert.ToInt16(GridView1.DataKeys[i].Value);



行号是对的,j是什么?
[/Quote]


举个例子来说吧
你将一个student表绑定到grid上 这个表里有一些字段 包括id 姓名 学号 等等等等
grid的DataKey 属性设置了 datakey=“学号”
下边开始解释问题 GridView1.DataKeys是什么?
GridView有一个属性是DataKey 当将数据表绑定到GridView时,设置数据表的一列为DataKey 即GridView.datakey=“学号” msdn讲DataKey解释为 获取 DataKeyCollection 对象,它存储数据列表控件中每个记录的键值。 其实 就是将 [学号] 这列作为列关键字 列标识 e.RowIndex是什么含义? 能够使用e.rowindex 说明 应该是grid的row相关事件 其中的e就是事件的触发者 也就是当前行 e.rowindex 也就是当前行的索引 行号 第几行的“几” GridView1.DataKeys[e.RowIndex]是一个数组吗? GridView1.DataKeys是一个数组 存储的是数据表中的一列的值 这一列 就是设为DataKeys的一列 即[学号]这一列 GridView1.DataKeys[e.RowIndex]则是学号这一列这个数组中的一个值 索引为当前行的行号 也就是说GridView1.DataKeys[e.RowIndex]是当前行所对应的数据行这一行 的 学号这个datakey GridView1.DataKeys[e.RowIndex].Value是什么? 这里就是当前行所对应的数据行这一行 的 学号这个datakey 所存储的值 即当前选择这个学生的学号 GridView1.DataKeys[GridView1.SelectedIndex].Value.ToString() 与 GridView1.DataKeys[e.RowIndex].Value.ToString() 的区别 是不同事件中获取当前选中行行号的不同方法 在grid的行相关事件中 可以直接用e来得到当前行 但是在非grid行事件中 作为e的事件触发对象就不是行 所以要用GridView1.SelectedIndex 来获取当前选中行的行号
mengxj85 2010-02-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 mengxj85 的回复:]
引用 3 楼 yinhunfeixue 的回复:
引用 1 楼 wuyq11 的回复:
Button btn= (Button)sender;
int i= ((GridViewRow)btn.NamingContainer).RowIndex;//获得行号
int j= Convert.ToInt16(GridView1.DataKeys[i].Value);


行号是对的,j是什么?

j=>DataKeys  datakeyname
[/Quote]
事件定义datakeynames的值,且值为int
mengxj85 2010-02-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yinhunfeixue 的回复:]
引用 1 楼 wuyq11 的回复:
Button btn= (Button)sender;
int i= ((GridViewRow)btn.NamingContainer).RowIndex;//获得行号
int j= Convert.ToInt16(GridView1.DataKeys[i].Value);



行号是对的,j是什么?
[/Quote]
j=>DataKeys datakeyname
yinhunfeixue 2010-02-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyq11 的回复:]
Button btn= (Button)sender;
int i= ((GridViewRow)btn.NamingContainer).RowIndex;//获得行号
int j= Convert.ToInt16(GridView1.DataKeys[i].Value);

[/Quote]

行号是对的,j是什么?
yinhunfeixue 2010-02-08
  • 打赏
  • 举报
回复
引用 11 楼 likevs 的回复:
太简单了

循环一遍控件,好像是以DataRow对象吧

判断是首模板或者底模板或者中间分隔模板,或者最常用的内容模板,然后取对象属性


循环太浪费资源了,还是少用比较好。。。。
谢谢。
yinhunfeixue 2010-02-08
  • 打赏
  • 举报
回复
int j= Convert.ToInt16(GridView1.DataKeys[i].Value);

j不是列号吧?
lihongxian 2010-02-08
  • 打赏
  • 举报
回复
引用 1 楼 wuyq11 的回复:
Button btn= (Button)sender;
int i= ((GridViewRow)btn.NamingContainer).RowIndex;//获得行号
int j= Convert.ToInt16(GridView1.DataKeys[i].Value);

up
灵雨飘零 2010-02-07
  • 打赏
  • 举报
回复
protected void Test(object sender, EventArgs e) 
{
Button btn= (Button)sender;
int i= ((GridViewRow)btn.NamingContainer).RowIndex;//获得行号
int j= Convert.ToInt16(GridView1.DataKeys[i].Value);
}
wuyq11 2010-02-07
  • 打赏
  • 举报
回复
Button btn= (Button)sender;
int i= ((GridViewRow)btn.NamingContainer).RowIndex;//获得行号
int j= Convert.ToInt16(GridView1.DataKeys[i].Value);

62,074

社区成员

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

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

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

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