1

ユーザーがクエリの背後にあるコードでボタンを押した後、1 つのテーブルからクエリ データを表示するグリッドビューがあります。このグリッドビューには autogeneratecolumns = false があり、BoundField DataField ヘッダー テキストを自分で追加しました。 「prd_nome」という名前を「nome」に変更すると、すべてが想定どおりに機能しました。

今、別の名前と別の列名を使用して、データベースに別のテーブルを作成しました。また、そのテーブルからデータを取得するためのコード ビハインド クエリを含む別のボタンを追加しましたが、データを表示するために、 autogeneratecolumns = true、ボタンをテストしたところ動作しましたが、ヘッダー テキストは列名と同じで、ID 列も両方のクエリで表示されています。

ヘッダー テキストを必要なものにハード コードする方法と、ID 列を非表示にする方法を教えてください。ラベル経由?バウンドフィールドデータフィールド経由?AS sql演算子を介して?誰かが私を助けることができれば、私はac#の初心者なので感謝します

これが現在の gridview ASP コードです。

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true"></asp:GridView>

最初のテーブルからクエリを渡すボタンのコードは次のとおりです。

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

    SqlConnection connection = new SqlConnection(GetConnectionString());
    connection.Open();
    SqlCommand sqlCmd = new SqlCommand("SELECT * FROM [ERPDQ].[dbo].[prd] WHERE prd_desc LIKE ('torta%')", connection);
    SqlDataAdapter sqlDa = new SqlDataAdapter(sqlCmd);

          sqlDa.Fill(dt);
    if (dt.Rows.Count > 0)
    {
        GridView1.DataSource = dt;
        GridView1.DataBind();

    }
    connection.Close();
}

2 番目のテーブルに関するクエリを渡すボタンのコードは次のとおりです。

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

    SqlConnection connection = new SqlConnection(GetConnectionString());
    connection.Open();
    SqlCommand sqlCmd = new SqlCommand("SELECT * FROM [ERPDQ].[dbo].[outra]", connection);
    SqlDataAdapter sqlDa = new SqlDataAdapter(sqlCmd);

    sqlDa.Fill(dt);
    if (dt.Rows.Count > 0)
    {
        GridView1.DataSource = dt;
        GridView1.DataBind();

    }
    connection.Close();
}

}

4

4 に答える 4

0

GridView RowDataBound イベントでこれを行うことができます

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
  //supposing id is the first cell,change the index according to your grid
  // hides the first column
  e.Row.Cells[0].Visible = false; 

  //to set header text
  if (e.Row.RowType == DataControlRowType.Header)
  {
     e.Row.Cells[1].Text = "Cell Text";
     e.Row.Cells[2].Text = "Cell Text";
  }
}
于 2013-11-14T19:44:38.270 に答える
0

みなさん、ありがとうございます。実装後のプロジェクトの方向性に応じて、いくつかの回答を使用すると確信しています。

グリッドビューの列ヘッダーの名前変更の問題に関して、現在のニーズに対して AS オペレーターが正常に機能することがわかりました。提供されたすべてのヘルプに感謝します

于 2013-11-18T11:17:23.077 に答える
0

AutoGenerateColumns=True を使用すると、選択ステートメントで AS sql 演算子を使用して列のヘッダー テキストを変更できます (既に提案したように)。

一般に、AutoGenerateColumns=True の使用は避けてください。柔軟性がないためです。あなたが指摘したように、1 つの列を非表示にするなどの簡単なことで行き詰まります。

RowDataBoundそして、これはイベントを使用してID列を非表示にする方法の例です

protected void rowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.Header)
    {
        for (int i = 0; i < e.Row.Controls.Count; i++)
        {
            var headerCell = e.Row.Controls[i] as DataControlFieldHeaderCell;
            if (headerCell != null)
            {
                if (headerCell.Text == "name_of_id_column")
                {
                    headerCell.Visible = false;
                    Page.Items["IDCellIndex"] = i;
                    break;
                }
            }
        }   
    }
    else if (e.Row.RowType == DataControlRowType.DataRow || e.Row.RowType == DataControlRowType.Footer)
    {
        int idCellIndex = Convert.ToInt32(Page.Items["IDCellIndex"]);

        e.Row.Controls[idCellIndex].Visible = false;
    }
}
于 2013-11-15T08:04:45.067 に答える