2

コードビハインドには次のものがあります。

[WebMethod]
public static string GenerateHtml(string id)
{
    //return id;
    DataView vwMain2;
    try
    {
        DbProviderFactory dbf = DbProviderFactories.GetFactory();
        using (IDbConnection con = dbf.CreateConnection())
        {
            string sSQL;
            sSQL = "select top 20                " + ControlChars.CrLf
                 + " ASSISTING_FILE_ID, DATE_ENTERED, CLIENT_CLAIM_NUM, PRIMARY_INSURED, PRIMARY_CLAIMANT, LOB_ID, FILE_STATUS, BRANCH_NAME," + ControlChars.CrLf
                 + " OWNERS_FIRST_NAME, OWNERS_LAST_NAME, OWNERS_NAME, OWNERS_EMAIL, OWNERS_OFFICE_PHONE, OWNERS_FAX_PHONE, OWNERS_CELL_PHONE" + ControlChars.CrLf
                 + "  from vwFILES_DetailViewWithOwners" + ControlChars.CrLf
                 + " where 1 = 1                    " + ControlChars.CrLf;
            //+ " where 1 = 1 and WEB_USER_ID = '" + Security.USER_ID.ToString() + "'" + ControlChars.CrLf;
            using (IDbCommand cmd = con.CreateCommand())
            {
                cmd.CommandText = sSQL;

                using (DbDataAdapter da = dbf.CreateDataAdapter())
                {
                    ((IDbDataAdapter)da).SelectCommand = cmd;
                    using (DataTable dt = new DataTable())
                    {
                        da.Fill(dt);
                        vwMain2 = dt.DefaultView;
                        GridView2.DataSource = vwMain2;

                            GridView2.DataBind();

                    }
                }
            }
        }
    }
    catch (Exception ex)
    {
        SplendidError.SystemError(new StackTrace(true).GetFrame(0), ex.Message);
        //lblError.Text = ex.Message;
    }

}

それをループして、次の形式で HTML テーブルを作成します。

<table>
    <tbody>
        <tr>
            <th>Column Header</th>
        </tr>
        <tr>
            <td>Column Data</td>
        </tr>
    </tbody>
</table>

これを行う最善の方法は何ですか?生成された HTML を返したい。

ありがとうございました。

4

2 に答える 2

2

これを WebService のように呼び出したい場合 (例: jQuery ajax 呼び出し用)、いくつかの選択肢があります。

  1. これは特に好きではありませんが、UpdatePanelsを使用することも選択肢の 1 つかもしれません。
  2. SEO が問題ではなく、クライアント側でテーブルをレンダリングするだけでよい場合は、JSON オブジェクトを転送し、JavaScript コードを実行して DOM 要素を作成するだけです。
  3. それでも GridView を使用したい場合は、UserControl を使用して動的に読み込み、レンダリングされた文字列を使用して送り返すことができます(明らかに、UserControl には上記で記述したコードが含まれます)。

コード:

Control report;

StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
Html32TextWriter hw = new Html32TextWriter(sw);

report = LoadControl("WebUserControl.ascx");
report.RenderControl(hw);

report = LoadControl("WebUserControl.ascx"); 

((IReportUserControl)report).LoadReport(); //Initialize the control 

report.RenderControl(hw);

件名に関する Stackoverflow の投稿もあります

  1. アンドリューの答えは、別の単純なアプローチであり、同様に機能します。

  2. また、MVC は、そのようなことを行うときにおそらく多くの問題を解決することにも言及する価値があります。

于 2013-02-12T14:49:30.437 に答える
2

stringBuilder を使用して、いくつかのループで手動で HTML をつなぎ合わせます。

StringBuilder sb = new StringBuilder();

sb.append('<table><tbody>');

foreach(DataRow r in dt.Rows)
{
     sb.append('<tr><th>' + r["ColumnHeader"] + '</th></tr>');
     sb.append('<tr><th>' + r["ColumnData"] + '</th></tr>');
}

 sb.append('</tbody></table>');


  return sb.ToString();
于 2013-02-12T14:41:10.510 に答える