c# - asp.net gridview 中的动态链接

标签 c# asp.net gridview hyperlink

我正在尝试创建一个带有额外列的 GridView ,该列包含每行的超链接。不幸的是,我的超链接不是从列的顶部开始,而是从超链接列的第二行开始。

查看此图片了解更多信息>>> http://i.imgur.com/TLsVo5s.png

正如您在该图片中看到的,有一个包含超链接的“ View ”列,但问题是第一行始终为空。第二行的超链接应该在第一行,第三行应该在第二行,依此类推。

谁能告诉我哪里出错了?

这是我在 aspx 页面上的 gridview 声明:

<asp:GridView ID="GridView1" runat="server" CellPadding="4" AllowPaging="True" 
    AllowSorting="True" AutoGenerateColumns="False" 
    OnPageIndexChanging="GridView1_PageIndexChanging" 
    OnSorting="GridView1_Sorting" PageSize="20" DataKeyNames="no_kwitansi"
    DataSourceID="home1" BackColor="White" BorderColor="#CC9966" BorderStyle="None"
    BorderWidth="1px" RowStyle-Wrap="False" OnRowDataBound="GridView1_RowDataBound">
    <AlternatingRowStyle BackColor="#CCCCCC" />
    <FooterStyle BackColor="#FFFFCC" ForeColor="#330099" />
    <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="#FFFFCC" />
    <PagerStyle BackColor="#FFFFCC" ForeColor="#330099" HorizontalAlign="Center" />
    <RowStyle BackColor="White" ForeColor="#330099" />
    <RowStyle HorizontalAlign="Center" />
    <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="#663399" />
    <SortedAscendingCellStyle BackColor="#FEFCEB" />
    <SortedAscendingHeaderStyle BackColor="#AF0101" />
    <SortedDescendingCellStyle BackColor="#F6F0C0" />
    <SortedDescendingHeaderStyle BackColor="#7E0000" />
    <Columns>
        <asp:BoundField HeaderText="#" />
        <asp:BoundField DataField="no_kwitansi" HeaderText="No.Kwitansi" SortExpression="no_kwitansi" ReadOnly="True" />
        <asp:BoundField DataField="nama_vendor" HeaderText="Vendor" SortExpression="nama_vendor" />
        <asp:BoundField DataField="nama_pekerja" HeaderText="Pekerja" SortExpression="nama_pekerja" />
        <asp:BoundField DataField="nama_penanggungjawab" HeaderText="Penanggungjawab" SortExpression="nama_penanggungjawab" />
        <asp:BoundField DataField="satuan" HeaderText="Satuan" SortExpression="satuan" />
        <asp:BoundField DataField="jumlah" HeaderText="Nominal" SortExpression="jumlah" />
        <asp:BoundField DataField="tanggal" HeaderText="Tanggal" SortExpression="tanggal" />
    </Columns>
</asp:GridView>

下面是我的 C# 代码:

这是我的 page_load 函数,我在这里创建了模板字段。

protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            ViewState["SortExpr"] = Sort_Direction;

            TemplateField tfield = new TemplateField();
            tfield.HeaderText = "View";
            GridView1.Columns.Add(tfield);

            home1.DataBind();
        }
    }

这是我的 gridview rowDataBound 函数,我在其中创建超链接。

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            HyperLink hlContro = new HyperLink();
            for (int i = 0; i < GridView1.Rows.Count; i++)
            {
                hlContro.NavigateUrl = "./Home.aspx?ID=" + GridView1.Rows[i].Cells[1].Text;
                //hlContro.ImageUrl = "./sample.jpg";
                hlContro.Text = "Documents";
                //GridView1.Rows[i].Cells[0].Controls.Add(hlContro);
            }
            e.Row.Cells[8].Controls.Add(hlContro);
        }
    }

最佳答案

那么为什么不只是一个模板字段,并删除所有服务器端样板文件呢?如果您更改列的位置会怎样?

以下是您无需在服务器端代码中编写任何内容的解决方案。简单易行。

<asp:TemplateField HeaderText="Active">
   <ItemTemplate>
     <asp:HyperLink ID="HyperLink1" runat="server" Text='<%# Eval("no_kwitansi") %>' 
        NavigateUrl= '<%# "./Home.aspx?ID=" + Eval("no_kwitansi") %>'>
     </asp:HyperLink>

   </ItemTemplate>

</asp:TemplateField>

关于c# - asp.net gridview 中的动态链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24386671/

相关文章:

c# - 设计 : How to inform controllers about data modification across application

C# 在 <form runat ="server"> </form> 中有多个客户端表单?

c# - 为什么在 Javascript 中附加事件处理程序会阻止我的服务器端事件触发?

c# - 如何在同一个类的静态列表属性中添加一个类的对象?

c# - 多个线程读取静态对象是否安全?

asp.net - 为什么下载的文件无法保留在模型弹出窗口中?

javascript - 在 Raphael JS 中围绕你的论文绘制边框

ajax - 不重新加载页面的 gridview Yii2 中的分页

javascript - 通过客户端脚本更改时访问服务器端只读文本框值的解决方法

c# - gridview 排序不适用于数字