Programing

GridView-빈 데이터 소스에 헤더 표시

lottogame 2020. 10. 21. 07:38
반응형

GridView-빈 데이터 소스에 헤더 표시


C #에서 데이터 소스가 비어 있어도 gridview의 헤더를 어떻게 표시합니까?

열이 모두 미리 정의되어 있으므로 자동으로 열을 생성하지 않습니다.

현재 제가하고있는 것은 다음과 같습니다.

저장 프로 시저에서 DataTable을 다시 가져온 다음 gridview의 DataSource를 설정 한 다음 DataBind ()를 호출합니다.

이것은 데이터가있을 때 잘 작동하지만 행이 반환되지 않으면 그리드가 있어야하는 곳에 빈 자리가 생깁니다.

편집 : .NET 4+ 속성에 감사드립니다. 나는 이것을 .NET 3.5 일에 다시 물었다. 이제 훨씬 쉬워졌습니다. :)


ASP.Net 4.0은 부울 ShowHeaderWhenEmpty속성을 추가 했습니다.

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.showheaderwhenempty.aspx


<asp:GridView runat="server" ID="GridView1" ShowHeaderWhenEmpty="true" AutoGenerateColumns="false">
    <Columns>
        <asp:BoundField HeaderText="First Name" DataField="FirstName" />
        <asp:BoundField HeaderText="Last Name" DataField="LastName" />
    </Columns>
</asp:GridView>

참고 : 헤더는 DataBind ()가 null이 아닌 다른 이름으로 호출되지 않는 한 나타나지 않습니다.

GridView1.DataSource = New List(Of String)
GridView1.DataBind()

이것을 게시 한 후 나는 작동하는 방법을 생각해 냈습니다. 그러나 나는 이것이 이것을 처리하는 가장 좋은 방법이라고 생각하지 않습니다. 더 나은 것에 대한 제안이 있습니까?

//Check to see if we get rows back, if we do just bind.

if (dtFunding.Rows.Count != 0)
{
    grdFunding.DataSource = dtFunding;
    grdFunding.DataBind();
}
else
{
  //Other wise add a emtpy "New Row" to the datatable and then hide it after binding.

     dtFunding.Rows.Add(dtFunding.NewRow());
     grdFunding.DataSource = dtFunding;
     grdFunding.DataBind();
     grdFunding.Rows[0].Visible = false;
}

저는이 문제를 해결하기 위해 노력하고 있었으며 이러한 솔루션 중 어느 것도 저에게 효과가 없었습니다. 헤더에 필터를 제공하는 사용자 정의 필드를 사용하여 동적으로 EmptyDataTemplate생성했기 때문에 속성을 사용할 수 없습니다 GridView. 또는 ObjectDataSource대신 s를 사용하고 있기 때문에 게시 된 almny 예제를 사용할 수 없습니다 . 그러나이 답변이 다른 StackOverflow 질문에 게시되어 있음을 발견했습니다. 이 질문특정 상황에서 작업 할 수있는 이 우아한 솔루션에 연결됩니다 . 실제 데이터가 있었다면 생성되었을 동일한 헤더 행을 생성하기 위해 메서드를 재정의하는 것이 포함됩니다 . 나는 여기에 게시 할 가치가 있다고 생각했는데, 비슷한 수정으로 다른 사람들이 찾을 가능성이 높습니다.DataSetDataTableCreateChildControlsGridView


ASP.NET 3.5 이하로 작업하고 있고 문제가 저처럼 비교적 간단한 경우 SQL 쿼리에서 null 행을 반환 할 수 있습니다.

if not exists (select RepId, startdate,enddate from RepTable where RepID= 10)
     select null RepID,null StartDate,null EndDate
else
     select RepId, startdate,enddate from RepTable where RepID= 10

이 솔루션에는 C # 코드 또는 ASP.NET 코드가 필요하지 않습니다.

  1. 널 컬럼을 적절한 이름으로 캐스트해야합니다. 그렇지 않으면 작동하지 않습니다.
  2. 에서와 동일한 쿼리 인 Else 블록이 포함되어야합니다. if not exists (query part)
  3. 제 경우에는 10 대신 @RepID를 사용하고 있습니다. 이는 gridview 외부의 DropDownList 상자에 매핑됩니다.

드롭 다운을 변경하여 다른 담당자를 선택할 때마다 Gridview가 업데이트됩니다. 레코드가 없으면 널 행을 표시합니다.


세트 "<asp:GridView AutoGenerateColumns="false" ShowHeaderWhenEmpty="true""

showheaderwhenEmpty 특성


HeaderTemplate 속성을 사용하여 헤드를 프로그래밍 방식으로 설정하거나 .NET 3.5를 사용하는 경우 대신 ListView를 사용할 수 있습니다.

개인적으로 가능한 경우 GridView 및 DetailsView보다 ListView를 선호하며 HTML을 더 많이 제어 할 수 있습니다.


ownertableview의 ShowHeadersWhenNoRecords 속성을 true로 설정할 수 있습니다. aspx :

<asp:GridView ID="RadGrid2" runat="server" >       
<MasterTableView ShowHeadersWhenNoRecords="true"  > 

또한 GridView의 데이터 소스가 null (레코드가없는 경우) 인 경우 아래와 같이 설정할 수 있습니다. c # :

  if (GridView1.DataSource == null)  
  {  
        GridView1.DataSource = new string[] { };  
  } 
  GridView1.DataBind();

격자보기에이 속성을 추가합니다. ShowHeaderWhenEmpty = "True"확인하는 데 도움이 될 수 있습니다.


문제에 대한 매우 간단한 해결책을 찾았습니다. 간단히 두 개의 GridView를 만들었습니다. 첫 번째 GridView는 행을 반환하지 않도록 설계된 쿼리를 사용하여 DataSource를 호출했습니다. 다음과 같은 내용 만 포함되었습니다.

    <Columns>
        <asp:TemplateField HeaderStyle-HorizontalAlign="Left">
            <HeaderTemplate>

               <asp:Label ID="lbl0" etc.>  </asp:Label>
               <asp:Label ID="lbl1" etc.>  </asp:Label>

            </HeaderTemplate>
        </asp:TemplateField>
    </Columns>

그런 다음 다음과 같은 특성을 가진 div를 만들고 ShowHeader = "false"를 사용하여 GridView를 내부에 배치하여 맨 위 행이 다른 모든 행과 동일한 크기가되도록합니다.

<div style="overflow: auto; height: 29.5em; width: 100%">
    <asp:GridView ID="Rollup" runat="server" ShowHeader="false" DataSourceID="ObjectDataSource">
        <Columns>
            <asp:TemplateField HeaderStyle-HorizontalAlign="Left">
                <ItemTemplate>

               <asp:Label ID="lbl0" etc.>  </asp:Label>
               <asp:Label ID="lbl1" etc.>  </asp:Label>

                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
</div>

<asp:GridView ID="grdGroup"  EmptyDataText="No Records Found" ShowHeaderWhenEmpty="True" runat="server">

이것은 EmptyDataText 및 ShowHeaderWhenEmpty가있는 Gridview의 기본 예입니다.


ShowHeaderWhenEmpty 속성을 추가하고 true로 설정하십시오.

이 솔루션은 저에게 효과적입니다.


I was using asp sqlDataSource. It worked for me when I set the CancelSelectOnNullParameter to false as below:

<asp:SqlDataSource ID="SqlData1" runat="server" ConnectionString="" SelectCommand="myStoredProcedure" SelectCommandType="StoredProcedure" CancelSelectOnNullParameter="False"> </asp:SqlDataSource>


You may use EmptyDataText as shown below:

<asp:GridView ID="_gridView" RunAt="server" AutoGenerateColumns="false"
          EmptyDataText="No entries found.">

It does not show headers, it renders your message "No entries found." instead.


<asp:GridView ID="gvEmployee" runat="server"    
                 AutoGenerateColumns="False" ShowHeaderWhenEmpty=”True”>  
                    <Columns>  
                        <asp:BoundField DataField="Id" HeaderText="Id" />  
                        <asp:BoundField DataField="Name" HeaderText="Name" />  
                        <asp:BoundField DataField="Designation" HeaderText="Designation" />  
                        <asp:BoundField DataField="Salary" HeaderText="Salary"  />  
                    </Columns>  
                    <EmptyDataTemplate>No Record Available</EmptyDataTemplate>  
                </asp:GridView>  


in CS Page

gvEmployee.DataSource = dt;  
gvEmployee.DataBind();  

    <asp:GridView ID="gvEmployee" runat="server"    
                     AutoGenerateColumns="False" ShowHeaderWhenEmpty=”True”>  
                        <Columns>  
                            <asp:BoundField DataField="Id" HeaderText="Id" />  
                            <asp:BoundField DataField="Name" HeaderText="Name" />  
                            <asp:BoundField DataField="Designation" HeaderText="Designation" />  
                            <asp:BoundField DataField="Salary" HeaderText="Salary"  />  
                        </Columns>  
                        <EmptyDataTemplate>No Record Available</EmptyDataTemplate>  
                    </asp:GridView>  


    in CS Page

    gvEmployee.DataSource = dt;  
    gvEmployee.DataBind();  

Help.. see that link:
http://www.c-sharpcorner.com/UploadFile/d0e913/how-to-display-the-empty-gridview-in-case-of-no-records-in-d/

Use an EmptyDataTemplate like below. When your DataSource has no records, you will see your grid with headers, and the literal text or HTML that is inside the EmptyDataTemplate tags.

<asp:GridView ID="gvResults" AutoGenerateColumns="False" HeaderStyle-CssClass="tableheader" runat="server">
    <EmptyDataTemplate>
        <asp:Label ID="lblEmptySearch" runat="server">No Results Found</asp:Label>
    </EmptyDataTemplate>
    <Columns>
        <asp:BoundField DataField="ItemId" HeaderText="ID" />
        <asp:BoundField DataField="Description" HeaderText="Description" />
        ...
    </Columns>
</asp:GridView>

참고URL : https://stackoverflow.com/questions/354369/gridview-show-headers-on-empty-data-source

반응형