dataTable绑定GridView,后台代码如何生成带有超链的列。(若是通过前台代码实现 希望能给个详尽的代码)

ximomomoxinei28 2012-04-10 02:23:58
现阶段代码如下,AutoGenerateSelectButton属性设置成"True"以后就可以在SelectedIndexChanged事件中取到相应键值,但是现在我想以AutoGenerateSelectButton方式去实现,我想以我的“名字”列为超链接,同时点击的时候仍然可以在后台取到键值。但是不知道在后台如何生成带有超链接的列,同时前台代码应该怎么设置也不清楚。
asp.net初学者,还望高手指点。。 若是通过前台代码实现 希望能给个详尽的代码

现阶段代码如下

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataTable dt = new DataTable("Table_Order");
dt.Columns.Add("GUID", System.Type.GetType("System.Guid"));
dt.Columns.Add("名字", System.Type.GetType("System.String"));

DataRow dr = dt.NewRow();
dr["GUID"] = guid1;
dr["名字"] = "小明";

DataRow dr = dt.NewRow();
dr["GUID"] = guid2;
dr["名字"] = "小红";


DataView dv = new DataView(dt);
dynamicGenerateColumns(GridView1, dt);//动态生成列
GridView1.DataSource = dv;
GridView1.DataKeyNames = new string[] { "GUID"};//设置键
gv_OrderInfo.DataBind();
}
}

// 动态生成GridView的Columns
public static GridView dynamicGenerateColumns(GridView gv, DataTable dt)
{
// 把GridView的自动产生列设置为false,否则会出现重复列
gv.AutoGenerateColumns = false;
// 清空所有的Columns
gv.Columns.Clear();

// 遍历DataTable 的每个Columns,然后添加到GridView中去
foreach (DataColumn item in dt.Columns)
{
BoundField col = new BoundField();

col.HeaderText = item.ColumnName;
col.DataField = item.ColumnName;
col.Visible = true;
gv.Columns.Add(col);
}
return gv;
}

protected void gv_OrderInfo_SelectedIndexChanged(object sender, EventArgs e)//点击界面中的超链接之后,可以取到相应的键值(GUID)
{
Label1.Text = GridView1.SelectedDataKey["GUID"].ToString();
}



前台代码

<asp:GridView ID="GridView1" runat="server"
OnRowDataBound="GridView1_RowDataBound" AutoGenerateSelectButton="True"
OnSelectedIndexChanged="GridView1_SelectedIndexChanged">

</asp:GridView>
...全文
422 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
Delta 2012-04-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

去看看RowDataBound事件吧
[/Quote]safasd
orochiheart 2012-04-10
  • 打赏
  • 举报
回复
protected void gv_OrderInfo_SelectedIndexChanged(object sender, EventArgs e)
{
Label1.Text = "GUID:" + gv_OrderInfo.SelectedDataKey["GUID"].ToString();
Label2.Text = "ComeGUID:" + gv_OrderInfo.SelectedDataKey["ComeGUID"].ToString();
Label3.Text = "PatientGUID:" + gv_OrderInfo.SelectedDataKey["PatientGUID"].ToString();
}

protected void gv_OrderInfo_RowEditing(object sender, GridViewEditEventArgs e)
{
Label1.Text = gv_OrderInfo.DataKeys[e.NewEditIndex].Values["GUID"].ToString();
Label2.Text = gv_OrderInfo.DataKeys[e.NewEditIndex].Values["ComeGUID"].ToString();
Label3.Text = gv_OrderInfo.DataKeys[e.NewEditIndex].Values["PatientGUID"].ToString();
}

protected void gv_OrderInfo_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
Label1.Text = gv_OrderInfo.DataKeys[e.RowIndex].Values["GUID"].ToString();
Label2.Text = gv_OrderInfo.DataKeys[e.RowIndex].Values["ComeGUID"].ToString();
Label3.Text = gv_OrderInfo.DataKeys[e.RowIndex].Values["PatientGUID"].ToString();
}
orochiheart 2012-04-10
  • 打赏
  • 举报
回复
终于调试出来了 感谢mengmo376童鞋的回复,非常感谢!!!

调试成功代码如下
Label1.Text = gv_OrderInfo.DataKeys[e.NewEditIndex].Values["GUID"].ToString();
Label2.Text = gv_OrderInfo.DataKeys[e.NewEditIndex].Values["ComeGUID"].ToString();
Label3.Text = gv_OrderInfo.DataKeys[e.NewEditIndex].Values["PatientGUID"].ToString();
ximomomoxinei30 2012-04-10
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
GridView1_RowEditing 中

C# code
int id=Convert.ToInt32(GridView1.DataKeys[e.NewEditIndex].Value);


GridView1_RowDeleting中

C# code
int id = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Val……
[/Quote]
哥们。。能取到一个键的值 但是其它两个取不到了。。。之前设定的是三个列大的值
GridView1.DataKeyNames = new string[] { "GUID","ComeGUID","ParentGUID"};//设置键
应该怎么处理?
orochiheart 2012-04-10
  • 打赏
  • 举报
回复
顶上去 还是觉得力不从心。。
orochiheart 2012-04-10
  • 打赏
  • 举报
回复
先顶一下 再看各位精彩回复!
  • 打赏
  • 举报
回复
int id=Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Values[0].ToString());
orochiheart 2012-04-10
  • 打赏
  • 举报
回复
或者依然是在SelectedIndexChanged事件中取也行,我只是不知道前台点击的到底是 “删除”列 还是“查看”列 还是“修改”列,前台代码如下

<asp:GridView ID="gv_OrderInfo" runat="server"
OnSelectedIndexChanged="gv_OrderInfo_SelectedIndexChanged"
AutoGenerateColumns="False" OnRowEditing="gv_OrderInfo_RowEditing"
OnRowDeleting="gv_OrderInfo_RowDeleting">
<Columns>
<asp:ButtonField CommandName="Select" Text="查看" >
<ControlStyle ForeColor="Blue" />
</asp:ButtonField>

<asp:BoundField DataField="医院" HeaderText="医院" ItemStyle-Width="400px"
ReadOnly="True">
<ItemStyle Width="150px"></ItemStyle>
</asp:BoundField>



<asp:ButtonField CommandName="Edit" Text="修改" >
<ControlStyle ForeColor="Blue" />
</asp:ButtonField>


<asp:ButtonField CommandName="Delete" Text="删除" >
<ControlStyle ForeColor="Blue" />
</asp:ButtonField>


</Columns>

</asp:GridView>


先回家了,到家再看。。
暮雪 2012-04-10
  • 打赏
  • 举报
回复
GridView1_RowEditing 中
int id=Convert.ToInt32(GridView1.DataKeys[e.NewEditIndex].Value);


GridView1_RowDeleting中
int id = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Value);


希望对楼主有用
zhulong1111 2012-04-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
前台代码,绑定字段 name

HTML code
<asp:TemplateField HeaderText="name" >
<ItemTemplate>
<asp:LinkButton ID="nmae" runat="server" Text=……
[/Quote] 这样
orochiheart 2012-04-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
前台代码,绑定字段 name

HTML code

<asp:TemplateField HeaderText="name" >
<ItemTemplate>
<asp:LinkButton ID="nmae" runat="server" Tex……
[/Quote]
感谢回复。。。方法很好,正好我也有点点入门了 刚好能看得懂你写的代码 呵呵
orochiheart 2012-04-10
  • 打赏
  • 举报
回复
我换另一种方式已经暂时解决了这个问题,还有个问题,一并放在这个帖子里问吧。。。搞定了马上结贴

在databding之前,我设置了键 代码如下
 
gv_OrderInfo.DataKeyNames = new string[] { "GUID", "ComeGUID", "PatientGUID" };//设置键


然后在SelectedIndexChanged事件中可以取到值了 代码如下

protected void gv_OrderInfo_SelectedIndexChanged(object sender, EventArgs e)
{
Label1.Text = "GUID:" + gv_OrderInfo.SelectedDataKey["GUID"].ToString();
Label2.Text = "ComeGUID:" + gv_OrderInfo.SelectedDataKey["ComeGUID"].ToString();
Label3.Text = "PatientGUID:" + gv_OrderInfo.SelectedDataKey["PatientGUID"].ToString();
}



现在我想在RowEditing和RowDeleting事件中也能取到键值,但是报错了,提示“未将对象引用设置到对象的实例。” 也就是说 gv_OrderInfo.SelectedDataKey的值为null了。
应该怎样在RowEditing和RowDeleting也能取到键值,像SelectedIndexChanged事件中那样能取到键?
暮雪 2012-04-10
  • 打赏
  • 举报
回复
前台代码,绑定字段 name
<asp:TemplateField  HeaderText="name" >
<ItemTemplate>
<asp:LinkButton ID="nmae" runat="server" Text='<%# Eval("name")%>' CommandName="Edit" ></asp:LinkButton><br />
</ItemTemplate>
</asp:TemplateField>


后台利用 GridView1_RowEditing 事件作相应跳转页面操作
    protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
Response.Redirect("index.aspx");

}
  • 打赏
  • 举报
回复
HyperLinkField
orochiheart 2012-04-10
  • 打赏
  • 举报
回复
大号分不多了 只能用马甲提问了 希望大侠们解答。。。
orochiheart 2012-04-10
  • 打赏
  • 举报
回复
大侠们帮帮忙啊 着急用!
ximomomoxinei28 2012-04-10
  • 打赏
  • 举报
回复
刚从winform转asp.net 有好多不懂的 希望高手多多指点 先谢谢了!!!
ximomomoxinei28 2012-04-10
  • 打赏
  • 举报
回复
但是现在我想以AutoGenerateSelectButton
IssacChow 2012-04-10
  • 打赏
  • 举报
回复
去看看RowDataBound事件吧

62,267

社区成员

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

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

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

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