inf102
@inf102

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

ASP.NET のGridViewの高さ

環境 VS2022 c# ASP.NETのGridView

                conn = new OleDbConnection();
                conn.ConnectionString = ConnectionString;
                conn.Open();
                DataTable dt = new DataTable();
                OleDbDataAdapter adapter = new OleDbDataAdapter();

                comm = new OleDbCommand();
                var cmd = conn.CreateCommand();
                cmd.CommandText = "SELECT * FROM DAYDATA";
                
                adapter.SelectCommand = cmd;
                adapter.Fill(dt);

                GridView1.DataSource = dt;
                GridView1.DataBind();
                conn.Close()

こんな感じで動的にDataTableでGridViewに表を出したとき、SELECT結果が1-2行の時高さが大きくなってしまいます。
5行SELECTされた時は高さは丁度いいのですが。

SELECTされた結果が1行の時でも高さが大きくならないようにできますか。

多数行時は問題なし
1 - コピー (3).jpg

1-2行表示された時は高さがおかしくなる
1 - コピー (4).jpg

0

2Answer

そいうの初めて聞きました。画像を貼れませんか?

以下の記事に書いてあるように css で行の高さを指定するとか、空行を追加するとかでは対応できませんか?

GridView の最終ページに空行追加
http://surferonwww.info/BlogEngine/post/2015/07/07/add-empty-rows-in-last-page-of-paging-enabled-gridview.aspx


【追記】

質問欄に追加した画像を見るとデフォルトの設定ではないように見えます。

デフォルト(何も設定しない)ではそうはなりません。質問者さんが質問に書いてない何かをした結果でしょう。aspx のコードはどうなっているのですか?

5 行の場合

GridView1.jpg

1 行の場合

GridView2.jpg

上の結果を表示したコードはー以下の通りです。上の画像の行数の違いは .aspx.cs のコードの中の for (int i = 0; i < 5; i++) で変えています。

.aspx.cs

using System;
using System.Data;

namespace WebForms1
{
    public partial class WebForm39 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                var dt = new DataTable();
                DataRow dr;

                dt.Columns.Add(new DataColumn("Item", typeof(Int32)));
                dt.Columns.Add(new DataColumn("Name", typeof(string)));
                dt.Columns.Add(new DataColumn("Price", typeof(Int32)));

                for (int i = 0; i < 5; i++)
                {
                    dr = dt.NewRow();
                    dr["Item"] = i;
                    dr["Name"] = "Item " + i.ToString();
                    dr["Price"] = 123000 * (i + 1);
                    dt.Rows.Add(dr);
                }

                GridView1.DataSource = dt;
                GridView1.DataBind();
            }
        }
    }
}

.aspx

<%@ Page Language="C#" AutoEventWireup="true" 
    CodeBehind="WebForm39.aspx.cs" 
    Inherits="WebForms1.WebForm39" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <asp:GridView ID="GridView1" runat="server"></asp:GridView>
    </form>
</body>
    
</html>
0Like

こんな感じで最終行に追加したところ余計な行があるにせよ、改善しました。
できればこんなコードなしでうまくやりたいです。
aspx側の問題かも知れません。

adapter.SelectCommand = cmd;

DataRow dr1 = dt.NewRow();
DataRow dr2 = dt.NewRow();
DataRow dr3 = dt.NewRow();

adapter.Fill(dt);

dt.Rows.Add(dr1);
dt.Rows.Add(dr2);
dt.Rows.Add(dr3);
GridView1.DataSource = dt;

0Like

Comments

  1. 質問者は回答欄に書かないようお願いします。質問と回答がゴッチャになってわけが分からなくなります。

  2. デフォルトの設定ではないように見えます。aspx のコードはどうなっているのでしょう?

Your answer might help someone💌