2010-04-26 2 views

ответ

2

Есть Распознать this article

В качестве альтернативы, вы можете определить свой собственный пользовательский интерфейс пользователя для пустой строки данных с помощью EmptyDataTemplate property.

+0

На самом деле я предпочитаю 'EmptyDataTemplate' больше, чем связывать пустые' DataSet' с 'GridView', я делаю это, и у него много проблем и почему они фактически ставят' EmptyDataTemplate'. Я обвинял Microsoft в том, что она не реализует такую ​​функцию, но для Bind empty DataSet для GridView это не лучший способ сделать это. –

1

Вы можете сделать это, присвоив одну фиктивную строку источнику данных сетки. По умолчанию источник данных будет заполнен фиктивной строкой. Таким образом, сетка будет показывать нижний колонтитул &. Чтобы скрыть строку, вы можете добавить одно фиктивное поле для отображения элемента управления или нет. И привяжите это поле к управлению видимым свойством. Наконец, когда вы добавляете фактическую строку в источник данных ... Удалите фиктивную строку, которую вы создали.

Пример - Источник:

<asp:GridView ID="grdQualify" runat="server" Width="100%" AutoGenerateColumns="False" ShowFooter="true" 
         EnableModelValidation="True"> 
         <Columns> 
          <asp:TemplateField HeaderText="Qualifying Exam"> 
           <ItemTemplate> 
            <asp:TextBox ID="txtQualifyingExam" runat="server" Text='<%# Eval("QualifyingExam") %>' Visible='<%# Eval("ShowVisible") %>'></asp:TextBox> 
           </ItemTemplate> 
           <FooterTemplate> 
            <asp:TextBox ID="txtQualifyingExamF" runat="server"></asp:TextBox> 
           </FooterTemplate> 
          </asp:TemplateField> 
          <asp:TemplateField HeaderText="Roll Number"> 
           <ItemTemplate> 
            <asp:TextBox ID="txtRollNumber" runat="server" Text='<%# Eval("RollNumber") %>' Visible='<%# Eval("ShowVisible") %>'></asp:TextBox> 
           </ItemTemplate> 
           <FooterTemplate> 
            <asp:TextBox ID="txtRollNumberF" runat="server"></asp:TextBox> 
           </FooterTemplate> 
          </asp:TemplateField> 
          <asp:TemplateField HeaderText="Admission Round"> 
           <ItemTemplate> 
            <asp:TextBox ID="txtAdmissionRound" runat="server" Text='<%# Eval("AdmissionRound") %>' Visible='<%# Eval("ShowVisible") %>'></asp:TextBox> 
           </ItemTemplate> 
           <FooterTemplate> 
            <asp:TextBox ID="txtAdmissionRoundF" runat="server"></asp:TextBox> 
           </FooterTemplate> 
          </asp:TemplateField> 
          <asp:TemplateField HeaderText="Marks Obtained"> 
           <ItemTemplate> 
            <asp:TextBox ID="txtMarksObtained" runat="server" Text='<%# Eval("MarksObtained") %>' Visible='<%# Eval("ShowVisible") %>'></asp:TextBox> 
           </ItemTemplate> 
           <FooterTemplate> 
            <asp:TextBox ID="txtMarksObtainedF" runat="server"></asp:TextBox> 
           </FooterTemplate> 
          </asp:TemplateField> 
          <asp:TemplateField HeaderText="Marks Out of"> 
           <ItemTemplate> 
            <asp:TextBox ID="txtMarksOutOf" runat="server" Text='<%# Eval("MarksOutOf") %>' Visible='<%# Eval("ShowVisible") %>'></asp:TextBox> 
           </ItemTemplate> 
           <FooterTemplate> 
            <asp:TextBox ID="txtMarksOutOfF" runat="server"></asp:TextBox> 
           </FooterTemplate> 
          </asp:TemplateField> 
          <asp:TemplateField HeaderText="Percentage"> 
           <ItemTemplate> 
            <asp:TextBox ID="txtPercentage" runat="server" Text='<%# Eval("Percentage") %>' Visible='<%# Eval("ShowVisible") %>'></asp:TextBox> 
           </ItemTemplate> 
           <FooterTemplate> 
            <asp:TextBox ID="txtPercentageF" runat="server"></asp:TextBox> 
           </FooterTemplate> 
          </asp:TemplateField> 
          <asp:TemplateField HeaderText="Remarks"> 
           <ItemTemplate> 
            <asp:TextBox ID="txtRemarks" runat="server" Text='<%# Eval("Remarks") %>' Visible='<%# Eval("ShowVisible") %>'></asp:TextBox> 
           </ItemTemplate> 
           <FooterTemplate> 
            <asp:TextBox ID="txtRemarksF" runat="server"></asp:TextBox> 
           </FooterTemplate> 
          </asp:TemplateField> 
          <asp:TemplateField> 
           <ItemTemplate> 
            <asp:Button ID="btnDeleteQualify" runat="server" Text="Delete" 
             Visible='<%# Eval("ShowVisible") %>' onclick="btnDeleteQualify_Click"></asp:Button> 
           </ItemTemplate> 
           <FooterTemplate> 
            <asp:Button ID="btnAddQualify" runat="server" Text="Add" 
             onclick="btnAddQualify_Click"></asp:Button> 
           </FooterTemplate> 
          </asp:TemplateField> 
         </Columns> 
        </asp:GridView> 

Пример - Код:

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 

      if (ViewState["QualifyDetails"] == null) 
       ViewState["QualifyDetails"] = new List<Entity_StudentAcademicQualify>(); 
      GridDataBindQualify((List<Entity_StudentAcademicQualify>)ViewState["QualifyDetails"]); 
     } 
    } 


    private void GridDataBindQualify(List<Entity_StudentAcademicQualify> list) 
    { 
     if (list.Count == 0) 
     { 
      Entity_StudentAcademicQualify studentQualify = new Entity_StudentAcademicQualify(); 

      studentQualify.ShowVisible = false; 
      studentQualify.QualifyingExam = string.Empty; 
      studentQualify.RollNumber = string.Empty; 
      studentQualify.AdmissionRound = string.Empty; 
      studentQualify.MarksObtained = 0; 
      studentQualify.MarksOutOf = 0; 
      studentQualify.Percentage = 0; 
      studentQualify.Remarks = string.Empty; 

      list.Add(studentQualify); 
     } 
     else 
     { 
      list.RemoveAt(0); 
     } 

     grdQualify.DataSource = list; 
     grdQualify.DataBind(); 

     ViewState["QualifyDetails"] = list; 
    } 

    protected void btnAddQualify_Click(object sender, EventArgs e) 
    { 
     GridViewRow row = (GridViewRow)((Button)sender).Parent.Parent; 

     List<Entity_StudentAcademicQualify> studentQualifys = 
      (List<Entity_StudentAcademicQualify>)ViewState["QualifyDetails"]; 

     Entity_StudentAcademicQualify studentQualify = new Entity_StudentAcademicQualify(); 

     studentQualify.ShowVisible = true; 
     studentQualify.QualifyingExam = ((TextBox)row.FindControl("txtQualifyingExamF")).Text; 
     studentQualify.RollNumber = ((TextBox)row.FindControl("txtRollNumberF")).Text; 
     studentQualify.AdmissionRound = ((TextBox)row.FindControl("txtAdmissionRoundF")).Text; 
     studentQualify.MarksObtained = Convert.ToInt32(((TextBox)row.FindControl("txtMarksObtainedF")).Text); 
     studentQualify.MarksOutOf = Convert.ToInt32(((TextBox)row.FindControl("txtMarksOutOfF")).Text); 
     studentQualify.Percentage = Convert.ToInt32(((TextBox)row.FindControl("txtPercentageF")).Text); 
     studentQualify.Remarks = ((TextBox)row.FindControl("txtRemarksF")).Text; 

     studentQualifys.Add(studentQualify); 

     GridDataBindQualify(studentQualifys); 
    } 

    protected void btnDeleteQualify_Click(object sender, EventArgs e) 
    { 
     List<Entity_StudentAcademicQualify> studentQualifys = 
      (List<Entity_StudentAcademicQualify>)ViewState["QualifyDetails"]; 

     studentQualifys.RemoveAt(((GridViewRow)((Button)sender).Parent.Parent).RowIndex); 

     GridDataBindQualify(studentQualifys); 
    } 
1

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

Необходимость показать верхнего/нижнего колонтитула может быть потому, что 1) Я хочу, чтобы пользователь видел структуру сетки и 2) Я хочу использовать колонтитул, чтобы добавить новые данные в таблицу.

Поэтому просто показывать «нет данных» недостаточно.

Таким образом, мое решение является тестом, если доступны данные. Если нет, то создайте структуру источника данных и заполните нужные поля одной строки значениями по умолчанию. Это важно, потому что, если вы привязываете источник данных к сетке, когда поля типа boolean и даты пустые, вы будете иметь ошибки «DBNull». Затем привяжите этот новый источник данных к сетке. затем скрыть строку в этой последовательности.

Protected Sub BindGrid() 
    con = New SqlConnection("mainLocal") 
    Dim da As New SqlDataAdapter("SELECT * FROM Test", con) 
    Dim dt As New DataTable() 
    da.Fill(dt) 

    dim rows as integer = dt.Rows.Count 
    If rows = 0 Then 
     Dim dr As DataRow = Nothing 

     dr = dt.NewRow() 
     dr("isActive") = False 
     dr("Dated") = Date.Now() 
     dt.Rows.Add(dr) 
    End If 

    Me.TestGridView.DataSource = dt 
    Me.TestGridView.DataBind() 
    If rows = 0 Then Me.TestGridView.Rows(0).Visible = False 
End Sub 

Я думаю, гораздо проще, короче, аккуратно!

Смежные вопросы