Условный вывод в ячейку на основе данных строки в событии RowDataBound Gridview - PullRequest
6 голосов
/ 12 марта 2012

У меня есть битовое значение (чёрное). Я хочу отобразить его статус в виде сетки, как если бы оно было истинным, в строке отображается «Да», в противном случае в строке отображается «Нет», это мой код, но результат неверный.Потому что мой код отображать все строки «Да», если одно значение истинно, я хочу, чтобы отображать статус каждой строки

    protected void gridview1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            DataTable dt = GetData();
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                Boolean bitBlack = Convert.ToBoolean(dt.Rows[i]["Black"]);
                if (bitBlack)
                {
                    e.Row.Cells[7].Text = ("Yes");
                }
                else
                {
                    e.Row.Cells[7].Text = ("No");
                }
            }
        }
    }

Ответы [ 3 ]

9 голосов
/ 12 марта 2012

Вы всегда можете использовать строки DataItem, чтобы получить базовый DataSource:

protected void gridview1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        DataRow row = ((DataRowView)e.Row.DataItem).Row;
        bool isBlack = row.Field<bool>("Black");
        e.Row.Cells[7].Text = isBlack ? "Yes" : "No";
    }
}
2 голосов
/ 12 марта 2012

Я не знаю вашего источника данных, но если вы можете оценить его, сделайте что-то вроде этого:

<asp:TemplateField HeaderText="Status">
            <ItemStyle CssClass="list" />
            <ItemTemplate>
                    <%# GetBit(Eval("BlackBit"))%>
            </ItemTemplate>
</asp:TemplateField>

И код-позади:

private string GetBit(object objBit)
{
    if (Convert.ToInt32(objBit) == 1)
    {
        return "Yes";
    }
    return "No";
}
2 голосов
/ 12 марта 2012

Вам нужно перебирать DataTable dt на каждом RowDatabound?

Если вам это не нужно, попробуйте:

protected void gridview1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {

                Boolean bitBlack = Convert.ToBoolean(e.Row.Cells[7].Text);
                if (bitBlack)
                {
                    e.Row.Cells[7].Text = "Yes";
                }
                else
                {
                    e.Row.Cells[7].Text = "No";
                }

        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...