2008-09-22 3 views
2

Я создаю gridView, что позволяет добавлять новые строки, добавив элементы управления, необходимое для вставки в FooterTemplate, но когда ObjectDataSource не имеет записей, я добавить фиктивную строку, как это FooterTemplate отображается только при наличии данных.Скрыть строку в GridView ASP.NET

Как я могу скрыть этот фиктивный ряд? Я попытался установить e.row.visible = false на RowDataBound, но строка все еще видна.

ответ

0

Это неправильное использование элемента управления GridView. Элемент управления GridView имеет специальную InsertRow, в которой ваши элементы управления должны идти.

+0

Я всегда хочу колонтитула, показанный как где мои элементы управления вставки содержатся, я хочу скрыть добавленный DummyRow. – Nicholas 2008-09-22 12:41:32

0

Может попробовать:

e.Row.Height = Unit.Pixel(0); 

Это не будет правильный ответ, но он может работать в то же время, пока вы не получите правильный ответ.

+0

Не работает, по-прежнему отображается пустая строка :-( – Nicholas 2008-09-22 12:55:20

0

Может быть, использовать CSS для установки дисплея нет ?!

1

Я думаю, что это то, что вам нужно:

<asp:GridView ID="grid" runat="server" AutoGenerateColumns="false" ShowFooter="true" OnRowDataBound="OnRowDataBound"> 
    <Columns> 
     <asp:TemplateField HeaderText="headertext"> 
      <ItemTemplate> 
       itemtext 
      </ItemTemplate> 
      <FooterTemplate> 
       insert controls 
      </FooterTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

и отделенный код:

protected void OnRowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     e.Row.Attributes["style"] = "display:none"; 
    } 
} 

Но я не понимаю, почему вы добавляете свое «вставку управление» в сноску вместо размещения их ниже сетки.

3

Вы можете обработать событие привязки gridview и скрыть фиктивную строку. (Не забудьте присвоить свойство события в коде ASPX):

protected void GridView1_DataBound(object sender, EventArgs e) 
    { 
     if (GridView1.Rows.Count == 1) 
      GridView1.Rows[0].Visible = false; 
    } 
0

GridView имеет специальное свойство для доступа к Footer Row, названный "FooterRow"

Затем холодный попробовать yourGrid.FooterRow. Visible = false;

0

Я сделал это на предыдущем задании, но поскольку вы можете добавлять строки, я всегда видел его в строке нижнего колонтитула. Для того, чтобы сделать так, чтобы сетка показывает вверх, я связан пустую строку типа, который обычно связан

dim row as Datarow = table.NewRow() 
table.AddRow(row) 
gridView.DataSource = table 
gridView.Databind() 

, то он имеет все столбцы, а затем вам нужно. Вы можете получить доступ к колонтитулу, потянув это:

'this will get the footer no matter how many rows there are in the grid. 

Dim footer as Control = gridView.Controls(0).Controls(gridView.Controls(0).Controls.Count -1) 

затем получить доступ к любому из элементов управления в сноске вы бы пойти и сделать:

Dim cntl as Control = footer.FindControl(<Insert Control Name Here>) 

Я предполагаю, что вы были бы в состоянии do a:

footer.Visible = false 

, чтобы сделать нижний колонтитул невидимым.

Надеюсь, это поможет!

Редактировать Я только что понял, что вы сказали. Я в основном удаляю строку, когда добавляю новую, но для этого вам нужно проверить, есть ли другие строки, и если есть, проверьте, есть ли в ней значения.

Чтобы удалить фиктивную строку сделать что-то вроде этого:

If mTable.Rows.Count = 1 AndAlso mTable.Rows(0)(<first column to check for null value>) Is DBNull.Value AndAlso mTable.Rows(0)(<second column>) Is DBNull.Value AndAlso mTable.Rows(0)(<thrid column>) Is DBNull.Value Then 
mTable.Rows.Remove(mTable.Rows(0)) 
End If 
mTable.Rows.Add(row) 
gridView.Datasource = mTable 
gridView.Databind() 
0

Чтобы сделать его видимым, просто использовать:

Gridview.Rows.Item(i).Attributes.Add("style", "display:block") 

И сделать его невидимым

Gridview.Rows.Item(i).Attributes.Add("style", "display:none") 
0

Почему вы не используете EmptyDataTemplate? Это, кажется, отлично работает, даже если я только использую его на пару дней ...

0

Вы должны использовать DataKeyNames в вашем GridView:

<asp:GridView ID="GridView1" runat="server" DataKeyNames="FooID">

А затем получить его на свой код: GridView1.DataKeys[0].Value.ToString()

Где «0» является номер строки вы хотите, чтобы получить «FooID»

3

Пожалуйста, попробуйте следующее

protected void GridView1_DataBound(object sender, EventArgs e) 
    { 
     GridView1.Rows[0].Visible = false; 
    } 
+0

Это спрятало мой весь GV. – SearchForKnowledge 2015-03-25 13:18:49

-4

Это можно легко сделать с помощью SQL

USE YourdatabaseName select * from TableName where Column_Name <> '' 
+4

-1 Вопрос не имеет ничего общего с SQL, он пытается работать с GridView. – JustinDoesWork 2012-03-23 19:44:57

0

Если вы не хотите, чтобы отобразить данные, когда столбец/строка равна нулю:

if (!String.IsNullOrEmpty(item.DataName)) 
{ 
    e.Row.Visible = false; 
}