C# ASP generowanie tabeli na piechotę

0

Hej,
chciałbym na stronie www wypisać wynik zapytania w tabeli HTML.
Jako, że robię to 1szy raz pytam.
Mogę zrobić np. tak

using (var connection = new SqlConnection(getConnectionString()))
{
                SqlCommand cmd = connection.CreateCommand();
 
                cmd.CommandText = "SELECT cos1, cos2 from table ";
 
                connection.Open();
                SqlDataReader reader = cmd.ExecuteReader();
                GridView1.DataSource = reader;
                GridView1.DataBind();
}

i jest niby ok bo mogę dodać styl do tego grida i jakoś to będzie wyglądało. Mam problem aby np. w dodatkowej kolumnie na końcu umieścić link - po kliknięciu ma lecieć update flagi dla danego wpisu.
Gdybym potrafił wypisać w pętli i "na żywca" generować sobie kod HTML nie byłoby problemu.

0

Na pewno jest lepsze rozwiązanie, ale najprostsze to dodać do selecta:

cmd.CommandText = string.Format("SELECT cos1, cos2, '<a href={0}?update=' + idcosia + '>Update</a>' AS link FROM table", tuWstawOdpowiedniegoLinka);

Kwestia jeszcze jak będzie tą kolumnę interpretował DataGrid ale tego już nie potrafię powiedzieć. Musisz sprawdzić.

0

Możesz również wygenerować tabelę "ręcznie". WebForms'y posiadają konstrukcję foreach:

<table>
<% foreach (var item in Data) { %>
     <tr>
          <td>
                <%= item.Name %>
          </td>
     </tr>
<% } %>
</table>
0

ok, dzięki, tabela już jest :)
Jeszcze jedno pytanie. Jak w linku odpalić metodę, która dokonuje UPDATE flagi?

<a href="tutaj nie mam innej strony która robi update i przekierowuje gdzieś, mam metodę, która przyjmuję parametr">odczytano</a>

0

Dwie opcje. Albo użyć LinkButtona, albo zrobić ręcznie:
http://stackoverflow.com/questions/2476982/how-to-let-html-link-anchor-do-a-postback-to-be-like-linkbutton

Zobacz pierwszą, drugą i trzecią odpowiedź. Ja korzystałem z tej trzeciej.

0

na razie na roboczo, jak zadziała napiszę to "ładniej"

            using (var connection = new SqlConnection(settings.getConnectionString()))
            {
                SqlCommand cmd = connection.CreateCommand();

                cmd.CommandText = "SELECT pole1, pole2 etc... FROM tabele WHERE arg1 = @param1 ";

                cmd.Parameters.AddWithValue("@arg1", this.DropDownYear.SelectedValue);
  
                connection.Open();

                SqlDataReader reader = cmd.ExecuteReader();

                int rowNumber = 1;
                string htmlTableCode = "<table border='1'>"
                                            + "<tr>"
                                            + "<td>Lp.</td>"
                                            + "<td>Klient</td>"
                                            + "<td>Nr. notatki</td>"
                                            + "<td>Data kontaktu</td>"
                                            + "<td>Forma</td>"
                                            + "<td>Data nast. kontaktu</td>"
                                            + "<td>Treść</td>"
                                            + "<td>Akcja</td>"
                                            + "</tr>";
                                            
while (reader.Read())
                {
                    htmlTableCode += "<tr> " 
                                        + "<td>" + rowNumber.ToString() + "</td>"
                                        + "<td>" + reader["knt_akronim"].ToString() + "</td>"
                                        + "<td>" + reader["entry_noteno"].ToString() + "</td>"
                                        + "<td>" + reader["entry_date"].ToString() + "</td>"
                                        + "<td>" + reader["entry_form"].ToString() + "</td>"
                                        + "<td>" + reader["entry_nextdate"].ToString() + "</td>"
                                        + "<td>" + reader["entry_text"].ToString() + "</td>"
                                        + "<td><a id='someclientid' name='id_"+rowNumber+"' href='javascript:void(0);' onclick=\"__doPostBack('id_"+rowNumber+"', 'fire');\">update</a></td>"
                                      + "</tr>";
                    rowNumber++;
                }
                htmlTableCode += "</table>";
                htmlTableBox.Text = htmlTableCode;

            }

czy o coś takiego Ci chodziło? ten link nie odpala mi testowej metody fire()
gdy zapodam

+ "<td><asp:HtmlAnchor runat=\"server\" onclick=\"fire\">Just a simple link</asp:HtmlAnchor></td>"

to w ogóle nie jest link

0

Tworzenie widoku (HTML) w backendzie to nie jest najlepszy pomysł. Utwórz w klasie właściwość IEnumerable (np. List), do niej wrzuć dane z bazy i na frontendzie odczytaj przy pomocy foreach.

0

art3c masz całkowitą rację. Niemniej jednak najpierw chciałbym aby to w ogóle zadziałało. Na tą chwilę to klapa a już tylko/aż to zostało. Utknąłem :(

1 użytkowników online, w tym zalogowanych: 0, gości: 1