asp:Gridview
スタッフ メンバーがプロジェクトに費やした時間とコメントを表示する があります。日付をグリッド内のサブ見出しにしたいので、グリッドのすべての行に表示されません。グリッドをソートできません。グリッドは、別のユーザーコントロール内にあるユーザーコントロール内にあります。データベース クエリの列は次のとおりです。
- 日にち
- プロジェクト ID
- プロジェクト名/コード
- スタッフコメント
- 使った時間
グリッドビューは次のように定義されています。
<asp:GridView ID="grdTimeSheet"
runat="server"
AutoGenerateColumns="False"
CssClass="mGrid"
AllowPaging="false"
AllowSorting="false"
BorderStyle="None"
GridLines="None"
DataKeyNames="ItemID"
CaptionAlign="Top"
CellPadding="1"
CellSpacing="1"
ShowFooter="True"
OnRowDataBound="grdTimeSheet_RowDataBound"
Width="100%"
OnRowCommand="grdTimeSheet_OnRowCommand" >
GridView 内にリンク ボタンがあります。
<asp:LinkButton
ID="ItemLinkButton"
runat="server"
CommandArgument='<%# Eval("ID") %>'
CommandName="Select" Text='<%# Eval("ProjectNo") %>' >
</asp:LinkButton>
コード ビハインドのOnRowDataBound
イベントは、レコードの日付が変更されているかどうかを確認し、変更されている場合は、グリッドに新しい行を追加して日付を表示します。このプロセスは正常に表示されます。
は値をOnRowCommand
チェックし、等しい場合は からプロジェクト ID を取得します。これは、日付のサブ見出しのすぐ下にある行を除くすべての行で正常に機能します。CommandName
Select
CommandArgument
次のコードを使用してサブヘッダーを作成しました。
Table tbl = e.Row.Parent as Table;
if (tbl != null)
{
GridViewRow row =
new GridViewRow(
0,
0,
DataControlRowType.DataRow,
DataControlRowState.Normal);
TableCell cell = new TableCell();
cell.ColumnSpan = this.grdTimeSheet.Columns.Count;
cell.Width = Unit.Percentage(100);
cell.Style.Add("font-weight", "bold");
cell.Style.Add("color", "black");
HtmlGenericControl span = new HtmlGenericControl("span");
span.InnerHtml = currentDate;
cell.Controls.Add(span);
row.Cells.Add(cell);
tbl.Rows.AddAt(tbl.Rows.Count - 1, row);
}
問題はCommandArgument
、小見出しの下の最初のレコードに空白が返されることです。他のすべてのリンクは問題ありません。小見出しを取り除けば、すべてうまくいきます。
protected void grdTimeSheet_OnRowCommand(
object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Select")
{
selectedItemEvent(int.Parse(e.CommandArgument.ToString()));
}
}
同じ問題を抱えている人々の例をいくつか見つけましたが、本当の答えはありません.