4

データを表示するASP.netにGridviewがあります。データに応じて、セルの値に応じて色とテキストが変わります。列がテンプレート フィールドでない場合、これは正常に機能します。

 //WORKS WHEN IS NOT A TEMPLATE FIELD
 if (e.Row.RowType == DataControlRowType.DataRow)
 {
        if (e.Row.Cells[2].Text == "1")
        {

           e.Row.Cells[2].Text = "IN";
           e.Row.Cells[2].BackColor = Color.Blue;
           e.Row.Cells[2].ForeColor = Color.White;
        }

  }

列をテンプレートフィールドに変換しましたが、何も機能しません。

     //DOEST NOT WORK WHEN IS a TEMPLATE FIELD
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
         if (e.Row.Cells[2].Text == "1")
         {

             e.Row.Cells[2].Text = "IN";
             e.Row.Cells[2].BackColor = Color.Blue;
             e.Row.Cells[2].ForeColor = Color.White;
         }

     }

色が機能するようになりましたが、テキストを次のように変更する必要があります。IF statusID == 1 の場合は IN を表示し、それ以外の場合は statusID == 2 の場合は OUT を表示します

<asp:TemplateField HeaderText="StatusID" SortExpression="StatusID">
                            <EditItemTemplate>
                                <asp:DropDownList ID="DropDownList1" runat="server" SelectedValue = '<%# Bind("StatusID") %>'>
                                    <asp:ListItem Value="1">IN</asp:ListItem>
                                    <asp:ListItem Value="2">OUT</asp:ListItem>
                                </asp:DropDownList>
                            </EditItemTemplate>
                            <ItemTemplate>
                                <asp:Label ID="lblStatus" runat="server" Text='<%# Bind("StatusID") %>' ForeColor='<%# Convert.ToString(Eval("StatusID")) == "1" ? System.Drawing.Color.Green: Convert.ToString(Eval("StatusID")) == "2" ? System.Drawing.Color.Red: System.Drawing.Color.Purple%>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>

この問題を解決する方法を知っている人はいますか。前もって感謝します。

4

4 に答える 4

8

テンプレート列で機能しない理由は、ステータス値が null であるためです。以下を試してください。

// In template column,
if (e.Row.RowType == DataControlRowType.DataRow)
{
   var status = (Label)e.Row.FindControl("lblStatus");
   if (status.Text == "1")
   {
      e.Row.Cells[2].Text = "IN";
      e.Row.Cells[2].BackColor = Color.Blue;
      e.Row.Cells[2].ForeColor = Color.White;
   }
}

または DataItem を適切なオブジェクトにキャストし、ステータス値を取得します。

GridViewRow.DataItem プロパティ

// In template column,
if (e.Row.RowType == DataControlRowType.DataRow)
{
   var obj = (MyObject)e.Row.DataItem;
   if (obj.Status == 1)
   {
      e.Row.Cells[2].Text = "IN";
      e.Row.Cells[2].BackColor = Color.Blue;
      e.Row.Cells[2].ForeColor = Color.White;
   }
}
于 2013-04-09T16:53:29.087 に答える
2
if (e.Row.RowType == DataControlRowType.DataRow)
{
  Label lbl=(Label)e.Row.FindControl("lblStatus");
   if (lbl.Text == "1")
   {
      lbl.Text = "IN";
      e.Row.Cells[2].BackColor = Color.Blue;
      e.Row.Cells[2].ForeColor = Color.White;
   }
}
于 2013-04-09T16:59:38.273 に答える
0

私は vb プログラマーです。ここにサンプル コードがあります。

If e.Row.RowType = DataControlRowType.DataRow Then
                Dim abc As Label = TryCast(e.Row.FindControl("label1"), Label)

            If abc.Text = "ADMIN" Then
                e.Row.Cells(7).ForeColor = Drawing.Color.Blue

            End If
        End If

うまくいくことを本当に願っています。

于 2015-01-26T16:02:12.820 に答える