GridView

stassk8
Дата: 14.05.2010 13:52:41
Здравствуйте, подскажите пожалуйста как можно GridView проверить на заполнение (empty или нет). Добавлен GridView1 с sqlDataSource
<SelectParameters>
            <asp:ControlParameter ControlID="TextBox1" Name="id_zakaz" PropertyName="Text" 
                Type="Int32" />
 </SelectParameters>

Например, DetailsView1 проверял на заполнение таким образом If DetailsView1.Rows.Count < 1 Then Label1.Text = "Заказа не существует", единственная проблема была, при вводе значения которого нет в базе появлялся пустой DetailsView, а при втором клике на кнопку срабатывало Label1.Text = "Заказа не существует", а сейчас бы хотелось сделать тоже самое, но для GridView, спасибо. Пробывыл данную проверку указывать в load, preLoad, preInit, почитал про события на msdn, но сам не могу разобраться.
asmod64
Дата: 14.05.2010 14:15:41
stassk8,

<asp:GridView ....
<EmptyDataTemplate>
 </EmptyDataTemplate>
....
stassk8
Дата: 14.05.2010 15:01:37
не знание asp, берет свое, действительно все оказалось просто, спасибо! Но возможно ли как-то с помощью vb определить заполнен ли GridView или нет, т.к. на основе этого

Protected Sub GridView1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.SelectedIndexChanged
        Label2.Text = GridView1.SelectedRow.Cells(12).Text.Trim().ToString
    End Sub

В итоге при вводе значения которого нет в базе, обрабатывается EmptyDataTemplate, а Label2.Text остается от запроса, а хотелось бы Label1.Visible = False и еще должен скрываться DetailsView, попробывал
 <EmptyDataTemplate> 
            No records 
            <asp:Label ID="Label2" runat="server" Visible="False"></asp:Label>
          </EmptyDataTemplate> 
, но так нельзя делать, ведь Label2 уже был определен так же как и DetailsView, или к ним можно обратиться как-то?
stassk8
Дата: 14.05.2010 15:10:01
т.е.
 <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
     <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
        DataSourceID="SqlDataSource1">
         <Columns>
          ...
         </Columns>
         <EmptyDataTemplate> 
            No records 
            <asp:Label ID="Label2" runat="server" Visible="False"></asp:Label></EmptyDataTemplate> 


Label2 определен до GridView, а при No records этот же Label2 хочу сделать Visible="False", в первый раз как-то криво объяснил, простите.
asmod64
Дата: 14.05.2010 15:10:31
stassk8,

вот тут разжовано
asmod64
Дата: 14.05.2010 15:13:40
stassk8
т.е.
 <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
     <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
        DataSourceID="SqlDataSource1">
         <Columns>
          ...
         </Columns>
         <EmptyDataTemplate> 
            No records 
            <asp:Label ID="Label2" runat="server" Visible="False"></asp:Label></EmptyDataTemplate> 


Label2 определен до GridView, а при No records этот же Label2 хочу сделать Visible="False", в первый раз как-то криво объяснил, простите.


определяем
GridView.DataBound
и
 void searchResult_DataBound(object sender, EventArgs e)
    {
if (searchResult.Rows.Count == 0)
        {

        }
}
stassk8
Дата: 14.05.2010 15:29:02
сделал так:
 Protected Sub GridView1_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.DataBound
        If GridView1.Rows.Count = 0 Then
            DetailsView1.Visible = False
            Label2.Visible = False
        End If
    End Sub

Но теперь даже когда в GridView1 есть строки после выборки, не обрабатывается GridView1_SelectedIndexChanged (Label2.Text = GridView1.SelectedRow.Cells(12).Text.Trim().ToString), всегда Label2.Visible = False и DetailsView1.Visible = False. Я Вас правильно понял? или что-то не так делаю?
asmod64
Дата: 14.05.2010 15:33:22
stassk8,

GridView1_SelectedIndexChanged
у вас вызовется только после выбора строки
MSDN
asmod64
Дата: 14.05.2010 15:43:46
stassk8
сделал так:
 Protected Sub GridView1_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.DataBound
        If GridView1.Rows.Count = 0 Then
            DetailsView1.Visible = False
            Label2.Visible = False
        End If
    End Sub

Но теперь даже когда в GridView1 есть строки после выборки, не обрабатывается GridView1_SelectedIndexChanged (Label2.Text = GridView1.SelectedRow.Cells(12).Text.Trim().ToString), всегда Label2.Visible = False и DetailsView1.Visible = False. Я Вас правильно понял? или что-то не так делаю?


я кажись понял

Protected Sub GridView1_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.DataBound
        If GridView1.Rows.Count = 0 Then
            DetailsView1.Visible = False
            Label2.Visible = False
        else
            DetailsView1.Visible = True
            Label2.Visible = True
        End If
    End Sub
так?
stassk8
Дата: 14.05.2010 15:52:15
я и выбираю строку, т.е. есть Textbox в который вводится значение(параметры выборки), получается, что ввожу в Textbox значение, если такого нет No records, если значение есть, заполняется GridView, после этого в GridView выбираю строку, обрабатывается GridView1_SelectedIndexChanged и в из одного поля GridView значение присваиваю в Label.Text и заполняю DetailsView1, и все хорошо, Но когда ввожу опять значение в Textbox которого нет в базе, в GridView появляется No records, а Label.Text и DetailsView1 остается со значением из прошлого запроса, а по-идее нужно как-то сделать, чтобы они обнулялись или становились не видимыми все равно, лишь бы при GridView1 No records их не было.