GridView1_RowCommand事件中获取某列的值

xp_tony 2010-01-15 03:55:30
/// <summary>
/// 生成事件时激发
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void DVClientInfo_RowCommand(object sender, GridViewCommandEventArgs e)
{
int strProjectId = ?;
if (e.CommandName == "redact")//编辑
{
}
else if (e.CommandName == "forbid")//禁用
{
bool temp = centaline.Pro.ClassLibrary.Property.CProject.UpStatusF(strProjectId);
}
else if (e.CommandName == "comeback")//恢复
{
bool temp = centaline.Pro.ClassLibrary.Property.CProject.UpStatusR(strProjectId);
}
}
页面代码:
<asp:GridView ID="DVClientInfo" runat="server" onrowdatabound="DVClientInfo_RowDataBound" onrowcommand="DVClientInfo_RowCommand">
<Columns>
<asp:TemplateField>
<HeaderTemplate>
<input id="Checkbox2" type="checkbox" runat="server" /><label>全选</label>
</HeaderTemplate>
</asp:TemplateField>
<asp:BoundField Visible="False" DataField="ProjectId">
</asp:BoundField>
<asp:BoundField DataField="PropertyName" HeaderText="项目名称" ></asp:BoundField>
<asp:BoundField DataField="PropertyCode" HeaderText="项目编号" ></asp:BoundField>
<asp:BoundField DataField="PropertyDept" HeaderText="隶属部门" ></asp:BoundField>
<asp:BoundField DataField="Status" HeaderText="状态" ></asp:BoundField>
<asp:TemplateField HeaderText="操作">
<ItemTemplate>
<asp:LinkButton ID="lbtn_redact" runat="server" CommandName="redact" >编辑</asp:LinkButton>
<asp:LinkButton ID="lbtn_forbid" runat="server" CommandName="forbid" >禁用</asp:LinkButton>
<asp:LinkButton ID="lbtn_comeback" runat="server" CommandName="comeback" >恢复</asp:LinkButton>
</ItemTemplate>
<Itemstyle HorizontalAlign="Center" />
</asp:TemplateField>
</Columns>
</asp:GridView>

效果如上!我要获得 int strProjectId = ?; 的值 请教各位高手大哥帮帮忙!
...全文
770 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
xp_tony 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 guozhaoyou1 的回复:]
方法一(可以获取gridview隐藏的列)
在gridview中设置datakey  添加你要找的列
GridViewRow gvrow = (GridViewRow)(((LinkButton)e.CommandSource).NamingContainer);
int index = gvrow.RowIndex;   
string tNumber =GridView_projectTask.DataKeys[index].
Values["这是字段名"].ToString();

方法二:
GridViewRow gvrow = (GridViewRow)(((LinkButton)e.CommandSource).NamingContainer);
int index = gvrow.RowIndex;
       
string id=DVClientInfo.Rows [index ].Cells [2].ToString();

够清楚了吧,我常用的就这2种
[/Quote]

恩!哥们谢了!看你的方法让我解决了!谢谢啊!呵呵!
leejelen 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 leejelen 的回复:]
引用 12 楼 xp_tony 的回复:
引用 9 楼 leejelen 的回复:
还有就是你在前台控件那里加上datakey属性,并且设置为ID,也可以在后台绑定数据的时候,加上
this.gvData.DataKeyNames = new string[] { "ID" };gvData为你的控件名称,然后在后台
grdbank_ItemCommand时间里面:
long id = long.Paese(this.gvData.DataKeys[e.RowIndex].Value)
看看能获取到不!


呵呵!好像不行!

这个在Command时间中是不能用的,见谅见谅,在UPDATING里面才可以!

怎么不行?报什么错?

[/Quote]
guozhaoyou1 2010-01-15
  • 打赏
  • 举报
回复
方法一(可以获取gridview隐藏的列)
在gridview中设置datakey 添加你要找的列
GridViewRow gvrow = (GridViewRow)(((LinkButton)e.CommandSource).NamingContainer);
int index = gvrow.RowIndex;
string tNumber =GridView_projectTask.DataKeys[index].
Values["这是字段名"].ToString();

方法二:
GridViewRow gvrow = (GridViewRow)(((LinkButton)e.CommandSource).NamingContainer);
int index = gvrow.RowIndex;

string id=DVClientInfo.Rows [index ].Cells [2].ToString();

够清楚了吧,我常用的就这2种
leejelen 2010-01-15
  • 打赏
  • 举报
回复
哦 ,我只是说一种方法,也只是我用过的而已啦,哈哈!
xp_tony 2010-01-15
  • 打赏
  • 举报
回复
CommandName=' <%#Eval("ID") %>' 这个属性我在别的事件中有用到不能改!最好不要改 CommandName=' <%#Eval("ID") %>'这个属性
leejelen 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 xp_tony 的回复:]
引用 9 楼 leejelen 的回复:
还有就是你在前台控件那里加上datakey属性,并且设置为ID,也可以在后台绑定数据的时候,加上
this.gvData.DataKeyNames = new string[] { "ID" };gvData为你的控件名称,然后在后台
grdbank_ItemCommand时间里面:
long id = long.Paese(this.gvData.DataKeys[e.RowIndex].Value)
看看能获取到不!


呵呵!好像不行!
[/Quote]

怎么不行?报什么错?
guozhaoyou1 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 xp_tony 的回复:]
引用 6 楼 guozhaoyou1 的回复:
那就这样写吧
GridViewRow gvrow = (GridViewRow)(((LinkButton)e.CommandSource).NamingContainer);
int index = gvrow.RowIndex;
       
         
string tNumber =DVClientInfo.rows[index][2].tostring()


错误 37 无法将带 [] 的索引应用于“System.Web.UI.WebControls.GridViewRow”类型的表达式
[/Quote]

少写了个 “.”
DVClientInfo.Rows [index ].Cells [2].tostring
xp_tony 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 leejelen 的回复:]
还有就是你在前台控件那里加上datakey属性,并且设置为ID,也可以在后台绑定数据的时候,加上
this.gvData.DataKeyNames = new string[] { "ID" };gvData为你的控件名称,然后在后台
grdbank_ItemCommand时间里面:
long id = long.Paese(this.gvData.DataKeys[e.RowIndex].Value)
看看能获取到不!
[/Quote]

呵呵!好像不行!
leejelen 2010-01-15
  • 打赏
  • 举报
回复
加油加油!我也顺便学习其他方法哈。
xp_tony 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 guozhaoyou1 的回复:]
那就这样写吧
GridViewRow gvrow = (GridViewRow)(((LinkButton)e.CommandSource).NamingContainer);
int index = gvrow.RowIndex;
       
         
string tNumber =DVClientInfo.rows[index][2].tostring()
[/Quote]

错误 37 无法将带 [] 的索引应用于“System.Web.UI.WebControls.GridViewRow”类型的表达式
leejelen 2010-01-15
  • 打赏
  • 举报
回复
还有就是你在前台控件那里加上datakey属性,并且设置为ID,也可以在后台绑定数据的时候,加上
this.gvData.DataKeyNames = new string[] { "ID" };gvData为你的控件名称,然后在后台
grdbank_ItemCommand时间里面:
long id = long.Paese(this.gvData.DataKeys[e.RowIndex].Value)
看看能获取到不!
guozhaoyou1 2010-01-15
  • 打赏
  • 举报
回复
貌似你直接复制我的就出来结果了
leejelen 2010-01-15
  • 打赏
  • 举报
回复
前台:<asp:LinkButton runat="server" ID="btnNext" Text="子类" CommandArgument="Next" CommandName='<%#Eval("ID") %>'></asp:LinkButton>

后台:long parentId = long.Parse(e.CommandName);
guozhaoyou1 2010-01-15
  • 打赏
  • 举报
回复
那就这样写吧
GridViewRow gvrow = (GridViewRow)(((LinkButton)e.CommandSource).NamingContainer);
int index = gvrow.RowIndex;


string tNumber =DVClientInfo.rows[index][2].tostring()
xp_tony 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 leejelen 的回复:]
可以在LINKBUTTON那里加上CommandName=' <%#Eval("id")%>'属性,然后在后台e.CommandName获取ID值,把那些操作名都放进CommandArgument里面。我之前试过好像可以,只是一种方法啦!小弟也是新手,不好别喷!
[/Quote]能贴出代码?
leejelen 2010-01-15
  • 打赏
  • 举报
回复
可以在LINKBUTTON那里加上CommandName='<%#Eval("id")%>'属性,然后在后台e.CommandName获取ID值,把那些操作名都放进CommandArgument里面。我之前试过好像可以,只是一种方法啦!小弟也是新手,不好别喷!
xp_tony 2010-01-15
  • 打赏
  • 举报
回复

/// <summary>
/// 生成事件时激发
/// </summary>
/// <param name="source"></param>
/// <param name="e"></param>
protected void grdbank_ItemCommand(object source, DataGridCommandEventArgs e)
{
int strPropertyId = Convert.ToInt32(e.Item.Cells[0].Text);

if (e.CommandName == "lb1")
{
ProjectRedact.Visible = true;

this.Label1.Text = e.Item.Cells[1].Text.ToString().Trim();
this.Label2.Text = e.Item.Cells[2].Text.ToString().Trim();
this.TextBox6.Text = e.Item.Cells[3].Text.ToString().Trim();
this.TextBox7.Text = e.Item.Cells[4].Text.ToString().Trim();
this.TextBox8.Text = e.Item.Cells[5].Text.ToString().Trim();
this.TextBox9.Text = e.Item.Cells[6].Text.ToString().Trim();
}
else if (e.CommandName == "lb2")
{
bool temp = EM_Project.ClassLibrary.CUser.UpPropertyF(strPropertyId);

if (temp)
{
Bind();
}
}
else if (e.CommandName == "lb3")
{
bool temp = EM_Project.ClassLibrary.CUser.UpPropertyR(strPropertyId);

if (temp)
{
Bind();
}
}
}

能不能像DataGrid里面一样
用这样int strPropertyId = Convert.ToInt32(e.Item.Cells[0].Text);的语句代替?
因为对GridView不太熟悉!
xp_tony 2010-01-15
  • 打赏
  • 举报
回复

/// <summary>
/// 生成事件时激发
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void DVClientInfo_RowCommand(object sender, GridViewCommandEventArgs e)
{
int strProjectId =

if (e.CommandName == "redact")//编辑
{

}
else if (e.CommandName == "forbid")//禁用
{
bool temp = centaline.Pro.ClassLibrary.Property.CProject.UpStatusF(strProjectId);
if (temp)
{
Bind();
}
}
else if (e.CommandName == "comeback")//恢复
{
bool temp = centaline.Pro.ClassLibrary.Property.CProject.UpStatusR(strProjectId);
if (temp)
{
Bind();
}
}
}
guozhaoyou1 2010-01-15
  • 打赏
  • 举报
回复
GridViewRow gvrow = (GridViewRow)(((LinkButton)e.CommandSource).NamingContainer);
int index = gvrow.RowIndex;


string tNumber =GridView_projectTask.DataKeys[index].
Values["strProjectId "].ToString();

62,052

社区成员

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

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

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

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