Показать верхний / нижний колонтитул Gridview с пустым источником данных? - PullRequest
1 голос
/ 26 апреля 2010

Как я могу показать верхний / нижний колонтитул Asp.Net Gridview с пустым источником данных?

Ответы [ 3 ]

2 голосов
/ 26 апреля 2010

Прочитайте эту статью

Кроме того, вы можете определить свой собственный пользовательский интерфейс для пустой строки данных, используя свойство EmptyDataTemplate .

1 голос
/ 24 мая 2014

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

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

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

Итак, мое решение - проверить, доступны ли данные. Если нет, то создайте структуру источника данных и заполните обязательные поля одной строки значениями по умолчанию. Это важно, потому что, если вы связываете источник данных с сеткой, когда такие поля, как логические и даты пустые, у вас будут ошибки 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

Наверное, намного проще, короче, аккуратнее!

1 голос
/ 16 июля 2013

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

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

    <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);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...