Pergunta

Verifique o código abaixo, onde consigo gerar a tabela dinamicamente a partir do banco de dados.Mas não é possível exibir o botão do link dentro do <td> elemento.

A função básica é gerar um novo <tr> para cada linha na tabela do banco de dados com um botão de link adicionado.

Código Aspx

<div style="width: 80%;" id="div_post" runat="server">
</div>

Código Aspx.cs

protected void GetvicharData()
{
    try
    {
        Data_display dd = new Data_display();
        DataTable dt = dd.disp_vichar();
        string in_html = string.Empty;
        int i = 0;
        in_html = "<table style=\"width: 100%;\">";
        foreach (DataRow dr in dt.Rows)
        {
        string str_build = string.Empty;
        i = i + 1;
        string lbDate = Convert.ToDateTime(dr["Date"]).ToString("dd-MMM-yy");
        string lbTopic = dr["Topic_Name"].ToString();
        string desc = dr["Description"].ToString();
        string imgURL = dr["img_url"].ToString();
        string textUrl = dr["txt_url"].ToString();
        str_build = ret_string(lbDate, lbTopic, desc, imgURL, textUrl, i);
        in_html += str_build;
        }
        in_html += "</table>";
        div_post.InnerHtml = in_html;
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

public string ret_string(string lbldate, string lbltopic, string description, string imgurl, string texturl, int i)
{
    try
    {
        StringBuilder sb = new StringBuilder();

        sb.Append("<tr><td class=\"post_date\" valign=\"top\" align=\"center\">");
        sb.Append("<asp:Label ID=\"lblDate\" runat=\"server\">" + lbldate + "</asp:Label>");
        sb.Append("</td><td class=\"post_topic\" valign=\"top\" >");
        sb.Append(" <asp:Label ID=\"lblTopic" + i + "\" runat=\"server\">" + lbltopic + "</asp:Label>");
        sb.Append("</td></tr><tr>");
        sb.Append("<td class=\"ShowPic\" valign=\"top\" align=\"right\" ><img src=\"" + imgurl + "\" alt=\"\" id=\"img_post\" /></td>");
        sb.Append("<td class=\"ShowPost\" valign=\"top\" style=\"text-align: justify\">");
        sb.Append("<asp:Panel ID=\"pnlDesc" + i + "\" runat=\"server\"><p>" + description + "</p>");
        sb.Append("</asp:Panel>");
        sb.Append("<div><asp:LinkButton ID=\"lnkbtn" + i + "\" runat=\"server\" Text=\"Read more...\" onclick=\"lnkbtn1_Click\" OnClientClick=\"openNewWin('" + texturl + "')\" />");
        sb.Append("</asp:LinkButton></div></td></tr>");
        string sbuild = sb.ToString();
        return sbuild;
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

Como não consigo entender por que meu botão de link fica oculto quando estou renderizando a página no navegador.

Foi útil?

Solução 3

Eu recebi minha resposta.Por favor, verifique o código.

sb.Append("<a href=\"#\" onclick=\"openNewWin('" + texturl + "')\" >Read More...</a>");

Outras dicas

OK, não testei, mas,

sb.Append("</asp:LinkButton></div></td></tr>");

Onde está a abertura para o último </tr> ?.Parece-me que está faltando.

tentar sb.Append("</asp:LinkButton></div></td>"); em vez de

Além disso, se persistir, tente remover o último e colocá-lo em um <tr><td> em vez de.Uma coisa a ter em mente também.Seu método ret_string está em um loop e, portanto, retorna 1 linha por vez.Você pode copiar seu método ret_string para uma página asp.net e remover as codificações C#, testar e ver se você retornou uma linha bem-sucedida.Boa sorte.

Atualizar também

OnClientClick=\"openNewWin('" + texturl + "')\" />");

Você pode tentar OnClientClick=\"openNewWin('" + texturl + "')\" >"); em vez disso, percebi que você já fechou o botão do link na próxima linha.Então tente remover o /> e ver o que aconteceu?

Me desculpe, cara.Agora mesmo, quando vejo seu código novamente, parece estranho.Tive que colocar outra resposta porque não tenho como testar aqui.Como mencionei na minha resposta anterior, seu método ret_string está em loop.Portanto, seu str_build deve conter linha ++ ou uma linha em cada instância de loop.Quando você faz assim..

foreach (DataRow dr in dt.Rows)
        {
        string str_build = string.Empty;
        .................
        str_build = ret_string(lbDate, lbTopic, desc, imgURL, textUrl, i);
        in_html += str_build;
        }

Primeiro str_build; segure uma linha na primeira vez.No entanto, quando chega outra rodada, você define string str_build = string.Empty; , isso é automaticamente limpo em todas as linhas do str_build;está segurando se eu entendi seu código claramente.Não tenho certeza de como você obtém suas linhas retornadas, mas sugiro que você retire o

string str_build = string.Empty;

e coloque-o antes do seu loop como abaixo

 string str_build = string.Empty;
foreach (DataRow dr in dt.Rows)
{

        .................
        str_build = ret_string(lbDate, lbTopic, desc, imgURL, textUrl, i);
        in_html += str_build;
}

Boa sorte .tente ver cara....

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top