programing

그리드 보기 - 비어 있는 데이터 원본에 헤더 표시

muds 2023. 6. 20. 21:54
반응형

그리드 보기 - 비어 있는 데이터 원본에 헤더 표시

C#에서 데이터 원본이 비어 있더라도 그리드 보기의 헤더를 계속 표시하려면 어떻게 해야 합니까?

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

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

저장 프로시저에서 데이터 테이블을 가져온 다음 그리드 보기의 데이터 원본을 설정한 다음 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대신 sDataSet또는DataTable그러나 이 답변은 다른 StackOverflow 질문에 게시되었으며, 이 질문은 제가 특정 상황에 맞게 작업할 수 있었던 우아한 솔루션과 연결됩니다.그것은 우선권을 갖는 것을 포함합니다.CreateChildControls의 방법GridView실제 데이터가 있는 경우 생성된 것과 동일한 헤더 행을 만듭니다.저는 비슷한 곤경에 처한 다른 사람들에게 발견될 가능성이 있는 이곳에 게시할 가치가 있다고 생각했습니다.

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. null 열을 적절한 이름으로 캐스팅했는지 확인하십시오. 그렇지 않으면 작동하지 않습니다.
  2. 그렇지 않은 경우와 동일한 쿼리인 블록을 포함해야 합니다.if not exists (query part)
  3. @Rep을 사용하는 경우10개가 아니라 아이디.그리드 보기 외부의 드롭다운 목록 상자에 매핑됩니다.

드롭다운을 변경하여 다른 담당자를 선택할 때마다 그리드 보기가 업데이트됩니다.레코드를 찾을 수 없으면 null 행이 표시됩니다.

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

showheaderwhenEmpty

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

개인적으로, 저는 그리드 보기와 세부 정보 보기보다 목록 보기를 선호합니다. 가능하면 HTML을 더 잘 제어할 수 있습니다.

ShowHeaders를 설정할 수 있습니다.No Records 소유자 테이블 뷰의 속성을 true.aspx로 기록하는 경우:

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

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

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

그리드 보기에 이 속성 추가: ShowHeaderWhen Empty="True" 확인하는 데 도움이 될 수 있습니다.

저는 그 문제에 대한 아주 간단한 해결책을 찾았습니다.그리드 보기를 두 개만 만들었습니다.첫 번째 GridView는 행을 반환하지 않도록 설계된 쿼리를 사용하여 데이터 소스를 호출했습니다.여기에는 다음과 같은 내용이 포함되어 있습니다.

    <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를 사용하는 Gridview 및 ShowHeaderWhen EmptyDataText를 사용하는 기본 예제입니다.

ShowHeaderWhenEmpty 속성을 추가하고 true로 설정하면 됩니다.

이 솔루션은 저에게 적합합니다.

저는 asp sqlDataSource를 사용하고 있었습니다.아래와 같이 CancelSelectOnNull 파라미터를 false로 설정했을 때 작동했습니다.

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

<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();  

사용할 수 있습니다.EmptyDataText아래와 같이:

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

헤더를 표시하지 않고 "항목을 찾을 수 없습니다."라는 메시지를 렌더링합니다.

    <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/

아래와 같이 EmptyDataTemplate를 사용합니다.데이터 원본에 레코드가 없으면 머리글이 있는 그리드와 EmptyDataTemplate 태그 안에 있는 리터럴 텍스트 또는 HTML이 표시됩니다.

<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

반응형