Как установить столбец в gridview как гиперссылку и нажать на данные идентификатора, которые могут указывать на другие, чтобы отобразить детали данных в C# asp.net - PullRequest
0 голосов
/ 07 августа 2020

Я пробовал много обойтись, но не смог сделать столбец гиперссылкой. Это результат, который я получаю. Вывод, который я получаю

Я хочу добавить гиперссылку, как показано на скриншоте ниже:

Вывод с гиперссылкой

Нажмите на эту ссылку, чтобы отобразить детали, как показано ниже

Это мой код, но я не могу добавить гиперссылку:

<asp:GridView ID="GridView1" HeaderStyle-BackColor="#3AC0F2" HeaderStyle-ForeColor="White"
        runat = "server" AutoGenerateColumns="false" OnDataBound="OnDataBound" GridLines="Both">      
        <Columns>  
            <asp:BoundField DataField="ID" HeaderText="ID" ItemStyle-Width="150" />
            <asp:BoundField DataField="LOT" HeaderText="LOT" ItemStyle-Width="150" />
            <asp:BoundField DataField="TYPE" HeaderText="TYPE" ItemStyle-Width="150" />
            <asp:BoundField DataField="KEY" HeaderText="KEY" ItemStyle-Width="150" />
            <asp:BoundField DataField="VALUE" HeaderText="VALUE" ItemStyle-Width="150" />             
        </Columns>
</asp:GridView>

Код, который я сделал:

protected void btn_Click(object sender, EventArgs e)
    {
        DataTable dt = new DataTable();

        DateTime StartDate = Convert.ToDateTime(datepickerstart.Text);
        string Date = StartDate.ToString("dd-MMM-yyyy");

        DateTime EndDate = Convert.ToDateTime(datepicker.Text);
        string dt2 = EndDate.ToString("dd-MMM-yyyy");
        
        GridView1.DataSource = GetData("Oracle query");
        GridView1.DataBind();

    
        txtDate.Text = "You Selected Start:" + Date;
        txtDate1.Text = "You Selected End:" + EndDate;
        

    }

    private DataTable GetData(string query)
    {
        string oradb = "Data Source=(DESCRIPTION =" +
    "(ADDRESS = (PROTOCOL=TCP)(HOST = '')(PORT = ''))" +
    "(CONNECT_DATA =" +
    "(SERVER = DEDICATED)" +
    "(SERVICE_NAME = '')" +
     ")" +
     ");User ID='';Password='';";

        DataTable dt = new DataTable();
        OracleConnection conn = new OracleConnection(oradb);
        using (OracleConnection con = new OracleConnection(oradb))
        {
            using (OracleCommand cmd = new OracleCommand(query))
            {
                using (OracleDataAdapter sda = new OracleDataAdapter())
                {
                    cmd.CommandType = CommandType.Text;
                    cmd.Connection = con;
                    sda.SelectCommand = cmd;
                    sda.Fill(dt);
                }
            }
            return dt;
        }
    }
    protected void OnDataBound(object sender, EventArgs e)
    {
        for (int rowIndex = GridView1.Rows.Count - 2; rowIndex >= 0; rowIndex--)
        {
            GridViewRow row = GridView1.Rows[rowIndex];
            GridViewRow previousRow = GridView1.Rows[rowIndex + 1];

            if (row.Cells[0].Text == previousRow.Cells[0].Text)
            {
                row.Cells[0].RowSpan = previousRow.Cells[0].RowSpan < 2 ? 2 :
                                       previousRow.Cells[0].RowSpan + 1;
                previousRow.Cells[0].Visible = false;
            }
        }
    }
  }

1 Ответ

1 голос
/ 07 августа 2020

Вместо Bound Field вам нужно использовать TemplateField> ItemTemplate> LinkButton, которое я использовал ниже:

<asp:GridView ID="GridView1" HeaderStyle-BackColor="#3AC0F2" HeaderStyle-ForeColor="White" runat = "server" AutoGenerateColumns="false" OnDataBound="OnDataBound" GridLines="Both">      
 <Columns>  
       
 <asp:TemplateField HeaderText="Action">
     <ItemTemplate>
          <asp:LinkButton ID="btnIdLink" runat="server" Text='<%# Bind("ID") %>'></asp:LinkButton>
     </ItemTemplate>
</asp:TemplateField>
        <asp:BoundField DataField="LOT" HeaderText="LOT" ItemStyle-Width="150" />
        <asp:BoundField DataField="TYPE" HeaderText="TYPE" ItemStyle-Width="150" />
        <asp:BoundField DataField="KEY" HeaderText="KEY" ItemStyle-Width="150" />
        <asp:BoundField DataField="VALUE" HeaderText="VALUE" ItemStyle-Width="150" />             
    </Columns>
</asp:GridView>
...