abdujalilc Ответов: 2

Скрыть пустую строку в gridview


I want to hide empty row in one particular column. I tried to but negative. Below is my code:


Что я уже пробовал:

protected void gvDb_DataBound(object sender, EventArgs e)
    {
        foreach (GridViewRow rw in gvDb.Rows)
        {
            if ((string.IsNullOrEmpty(rw.Cells[1].Text) | (rw.Cells[1].Text == "")))
            {
                rw.Visible = false;
            }
        }
    }

2 Ответов

Рейтинг:
9

F-ES Sitecore

Если вы отладите свой код, то поймете, почему он не работает. Вы предполагаете, что ячейка представления сетки для элемента без данных является пустой строкой, но, вероятно, это не так (иначе ваш код будет работать). В зависимости от используемого шаблона могут быть новые строки или неразрывные пробелы. Поставьте точку останова на коде и проверьте фактическое значение

rw.Cells[1]


и вы обнаружите, что это не то, что вы ожидаете.

Во всяком случае, проверка выходных данных gridview-это неправильный способ закрепить это, вы можете управлять видимостью строки на базовых данных, а не тем, как эти данные отображаются в html. Как вы это сделаете, зависит от того, что вы привязываете к своей строке, но вы хотите использовать событие RowDataBound, которое запускается для каждой строки, и в этом случае запрашивать базовые данные для строки и выяснять, видна ли строка.

Мой gridview

<asp:GridView ID="MyGridView" runat="server" AutoGenerateColumns="true" OnRowDataBound="MyGridView_RowDataBound">
    
</asp:GridView>


Это делается для привязки DataTable

protected void Page_Load(object sender, EventArgs e)
{
    DataTable data = new DataTable();
    data.Columns.Add("ID", typeof(int));
    data.Columns.Add("Name", typeof(string));

    data.Rows.Add(1, "John");
    data.Rows.Add(2, "");
    data.Rows.Add(3, "Dave");

    // you can set this event in code behind like below if you don't want to use the
    // OnRowDataBound attribute on the asp:GridView

    // MyGridView.RowDataBound += MyGridView_RowDataBound;

    MyGridView.DataSource = data;
    MyGridView.DataBind();
}

protected void MyGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
    // This event if fired for all template types (header, data, footer etc)
    // but we're only interested in the data rows so if this isn't a data
    // row exit the event
    if (e.Row.RowType != DataControlRowType.DataRow)
    {
        return;
    }

    // cast e.Row.DataItem to the underlying data type
    DataRowView data = (DataRowView)e.Row.DataItem;

    // check that data for empty values
    if (string.IsNullOrWhiteSpace((string)data["Name"]))
    {
        e.Row.Visible = false;
    }
}


Или если вы привязываетесь к списку объектов

public class MyData
{
    public int ID { get; set; }
    public string Name { get; set; }
}


protected void Page_Load(object sender, EventArgs e)
{
    List<MyData> data = new List<MyData>();
    data.Add(new MyData { ID = 1, Name = "John" });
    data.Add(new MyData { ID = 2, Name = "" });
    data.Add(new MyData { ID = 3, Name = "Dave" });

    // you can set this event in code behind like below if you don't want to use the
    // OnRowDataBound attribute on the asp:GridView

    // MyGridView.RowDataBound += MyGridView_RowDataBound;

    MyGridView.DataSource = data;
    MyGridView.DataBind();
}

protected void MyGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
    // This event if fired for all template types (header, data, footer etc)
    // but we're only interested in the data rows so if this isn't a data
    // row exit the event
    if (e.Row.RowType != DataControlRowType.DataRow)
    {
        return;
    }

    // cast e.Row.DataItem to the underlying data type
    MyData data = (MyData)e.Row.DataItem;

    // check that data for empty values
    if (string.IsNullOrWhiteSpace(data.Name))
    {
        e.Row.Visible = false;
    }
}


Рейтинг:
1

Karthik_Mahalingam

пробовать

private void gvDb_DataBound(Object sender, GridViewRowEventArgs e)
 {
 if (e.Row.RowType == DataControlRowType.DataRow)      
    if (e.Row.Cells[1].Text == "") 
        e.Row.Visible = false;
 }