0

SQL フィールドを Gridview 列にバインドする必要があります。少し前にこれを行いましたが、うまくいきましたが、これを行う方法を忘れていたので、ASP.NET AutoGenerate 列を使用して動作させました。データ バインディングを制御したいと思います。以下は私のコード ビハインドと私の Gridview です。 ..どんな支援も大歓迎です。

 protected void Page_Load(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection(Sitecore.Configuration.Settings.GetConnectionString("feedback"));
            SqlCommand cmd = new SqlCommand("select * from fb_results", conn);
            DataSet ds = new DataSet();
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            da.Fill(ds);
            GridView1.DataSource = ds;
            GridView1.DataBind();

            conn.Close();
        }

グリッドビュー:

<head id="Head1" runat="server">
    <title>Feedback</title>
</head>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
    <Columns>
        <asp:BoundField DataField="rpt_login" HeaderText="User Id" />
        <asp:BoundField DataField="fb_url" HeaderText="URL___" />
        <asp:BoundField DataField="fb_response" HeaderText="Answer: Did you find what you were looking for?" />
        <asp:BoundField DataField="fb_noResponse" HeaderText="No Response or Ignore" />
        <asp:BoundField DataField="fb_date" HeaderText="Date" />
        <asp:BoundField DataField="fb_serviceCall" HeaderText="Prevented Service Call" />
        <asp:BoundField DataField="fb_partsShipment" HeaderText="Prevented Parts Shipment" />
        <asp:BoundField DataField="fb_warranty" HeaderText="Under Warranty" />
        <asp:BoundField DataField="fb_cancel" HeaderText="Cancelled" />
        <asp:BoundField DataField="fb_none" HeaderText="None of the Above" />
    </Columns>
</asp:GridView>
4

2 に答える 2

4

わかった。したがって、コメントに関して:

これは私の個人的な経験です。これを返すSQLクエリがありました:

|-----------------------------------------------|
|Column 1       |Column 2       |Column 3       |
|---------------|---------------|---------------|
|"c1foor1bar"   |"c2foor1bar"   |"c3foor1bar"   |
|"c1foor2bar"   |"c2foor2bar"   |"c3foor2bar"   |
|"c1foor3bar"   |"c2foor3bar"   |"c3foor3bar"   |
|---------------|---------------|---------------|

私のaspxページは次のようになりました:

<asp:GridView runat="server" id="GridView1" AutoGenerateColumns="false">
    <asp:BoundField runat="server" DataField="strFirst"></asp:BoundField>
    <asp:BoundField runat="server" DataField="strLast"></asp:BoundField>
</asp:GridView>

そして、私のページロードは次のようになりました:

protected void Page_Load(object sender, EventArgs e)
{
    SqlConnection conn = new SqlConnection(<the info>);
    SqlCommand cmd = new SqlCommand("SELECT * FROM fb_results", conn);
    DataTable dt = new DataTable();
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    da.Fill(dt);
    GridView1.DataSource = dt;
    GridView1.DataBind();

    conn.Close();
}

2 つの問題がありました。まず、私のコラムは同じように呼ばれていませんでした。簡単に変更できましたが、実際には異なるデータを表しているので、そうしたくありませんでした。2 つ目は、あまりにも多くのデータを持ち込んでいたことです。私の解決策は、テーブルを再構築することでした:

protected void Page_Load(object sender, EventArgs e)
{
    SqlConnection conn = new SqlConnection(<the info>);
    SqlCommand cmd = new SqlCommand("SELECT * FROM fb_results", conn);
    DataTable dt = new DataTable();
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    da.Fill(dt);

    DataTable newTable = createDataTableTemplate();
    foreach (DataRow dr in dt.Rows) {
        DataRow newRow = newTable.NewRoW();

        newRow["strFirst"] = SomeOperation((String) dr["Column 1"]);
        newRow["strLast"] = SomeOtherOperation((String) dr["Column 2"]);

        newTable.Rows.Add (newRow);
    }

    GridView1.DataSource = newTable;
    GridView1.DataBind();

    conn.Close();
}

private DataTable createDataTableTemplate ()
{
    DataTable table = new DataTable("Table Title");

    DataColumn col1 = new DataColumn("strFirst");
    col1.DataType = System.Type.GetType("System.String");

    DataColumn col2 = new DataColumn("strLast");
    col2.DataType = System.Type.GetType("System.String");

    table.Columns.Add (col1);
    table.Columns.Add (col2);

    return table;
}

注意:DataSetは使用されておらず、すべてBoundFieldの s が含まrunat="server"れています。

于 2013-06-21T17:05:14.777 に答える