簡體   English   中英

如何顯示由表列和表限定的gridview頁腳是空的? ASP.NET C#

[英]How to show gridview footer which is bounded by table columns and table is empty ? ASP.NET C#

我正在研究我的SQL項目,我創建了一個gridview,其中我根據表列綁定了gridview頁腳中的值。

基本上,我正在創建一個gridview,其中用戶插入值並創建一個表。 但是,當表包含'One'記錄或多個記錄時,我正面臨一個問題,那么它工作正常,但我希望當表空,然后gridview的頁腳顯示包含“textboxes”,“checkboxes”和“dropdownlist” ”。

當表包含一個記錄然后這個gridview顯示,它工作正常,這里是

圖片

當表格中沒有數據時,此gridview顯示

圖片

我該如何顯示這種類型的gridview

圖片

當表沒有數據時,用戶插入值並創建表?

這是我的ASPX標記:

 <asp:GridView ID="GridView1" runat="server" ShowHeaderWhenEmpty="True" 
    AutoGenerateColumns="False" BackColor="#DEBA84"
    BorderColor="#DEBA84"  BorderStyle="None" BorderWidth="1px" CellPadding="3" CellSpacing="2"
     ShowFooter="True" Style="margin-left: 136px; margin-top: 72px;
    margin-right: 0px;" Height="16px" Width="685px" 
     DataSourceID="sql">
    <Columns>
        <asp:TemplateField HeaderText="Column_Name" SortExpression="Column_Name">
            <EditItemTemplate>
                 <asp:TextBox ID="txtName" runat="server" Text='<%# Bind("Column_Name") %>'></asp:TextBox>
                <asp:RequiredFieldValidator Text="*" ID="colname" ControlToValidate="txtName"
                    runat="server" ErrorMessage="Column Name is Required" ForeColor="Red">
                </asp:RequiredFieldValidator>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label1" runat="server" Text='<%# Bind("Column_Name") %>'></asp:Label>
            </ItemTemplate>
            <FooterTemplate>
                <asp:TextBox ID="txtColName" runat="server"></asp:TextBox>
                <asp:RequiredFieldValidator ValidationGroup="INSERT" Text="*" ID="insertcolname" ControlToValidate="txtColName"
                    runat="server" ErrorMessage="Column Name is Required" ForeColor="Red">
                </asp:RequiredFieldValidator>
           </FooterTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Data_Type" SortExpression="Data_Type">
            <EditItemTemplate>
                <asp:DropDownList ID="DropDownList1" runat="server" SelectedValue='<%# Bind("Data_Type") %>'>
                    <asp:ListItem>Select Datatype</asp:ListItem>
                    <asp:ListItem>int</asp:ListItem>
                    <asp:ListItem>Float</asp:ListItem>
                    <asp:ListItem>Varchar(50)</asp:ListItem>
                    <asp:ListItem>Varchar(100)</asp:ListItem>
                    <asp:ListItem>double</asp:ListItem>
                </asp:DropDownList>
                <asp:RequiredFieldValidator ID="datatype" ControlToValidate="DropDownList1"
                    runat="server" ErrorMessage="Data Type is Required" ForeColor="Red" InitialValue="Select Datatype">
                </asp:RequiredFieldValidator>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label2" runat="server" Text='<%# Bind("Data_Type") %>'></asp:Label>
            </ItemTemplate>
            <FooterTemplate>
                <asp:DropDownList ID="DropDownList2" runat="server">
                    <asp:ListItem>Select Datatype</asp:ListItem>
                    <asp:ListItem>int</asp:ListItem>
                    <asp:ListItem>Float</asp:ListItem>
                    <asp:ListItem>Varchar(50)</asp:ListItem>
                    <asp:ListItem>Varchar(100)</asp:ListItem>
                    <asp:ListItem>double</asp:ListItem>
                </asp:DropDownList>
                <asp:RequiredFieldValidator ValidationGroup="INSERT" Text="*"  ID="datatype" ControlToValidate="DropDownList2"
                    runat="server" ErrorMessage="Data Type is Required" ForeColor="Red" InitialValue="Select Datatype">
                </asp:RequiredFieldValidator>
            </FooterTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Allow_Null_" SortExpression="Allow_Null_">
                                <EditItemTemplate>
                                    <asp:CheckBox ID="CheckBox1" runat="server" Checked='<%#Convert.ToBoolean(DataBinder.Eval(Container.DataItem,"Allow_Null_")) %>'/>
                                </EditItemTemplate>
                                <ItemTemplate>
                                    <asp:CheckBox ID="CheckBox1" runat="server" Checked='<%# Convert.ToBoolean(DataBinder.Eval(Container.DataItem,"Allow_Null_"))%>' enabled="false" />
                                </ItemTemplate>
                                <FooterTemplate>
                                    <asp:CheckBox ID="nulll" runat="server" />
                                </FooterTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Primary_Key_" SortExpression="Primary_Key_">
                                <EditItemTemplate>
                                    <asp:CheckBox ID="CheckBox2" runat="server" Checked='<%# Convert.ToBoolean(DataBinder.Eval(Container.DataItem,"Primary_Key_")) %>' />
                                </EditItemTemplate>
                                <ItemTemplate>
                                    <asp:CheckBox ID="CheckBox2" runat="server" 
                                        Checked='<%#Convert.ToBoolean(DataBinder.Eval(Container.DataItem,"Primary_Key_")) %>' Enabled="false" />
                                </ItemTemplate>
                                <FooterTemplate>
                                    <asp:CheckBox ID="primary" runat="server" />
                                </FooterTemplate>
                            </asp:TemplateField>

        <asp:CommandField ShowEditButton="True" />
        <asp:CommandField ShowDeleteButton="True" />

        <asp:TemplateField HeaderText="Insert">
        <FooterTemplate>


             <asp:LinkButton ValidationGroup="INSERT" ID="LinkButton1" runat="server" OnClick="lbinssert">INSERT</asp:LinkButton>
            </FooterTemplate>
        </asp:TemplateField>


    </Columns>
    <FooterStyle BackColor="#F7DFB5" ForeColor="#8C4510" />
    <HeaderStyle BackColor="#A55129" Font-Bold="True" ForeColor="White" />
    <PagerStyle ForeColor="#8C4510" HorizontalAlign="Center" />
    <RowStyle BackColor="#FFF7E7" ForeColor="#8C4510" />
    <SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="White" />
    <SortedAscendingCellStyle BackColor="#FFF1D4" />
    <SortedAscendingHeaderStyle BackColor="#B95C30" />
    <SortedDescendingCellStyle BackColor="#F1E5CE" />
    <SortedDescendingHeaderStyle BackColor="#93451F" />
      </asp:GridView>

<asp:ValidationSummary ValidationGroup="INSERT" ID="ValidationSummary1" ForeColor="Red"
    runat="server" Height="25px" style="margin-left: 140px" />
    <br />
<input type="submit" style="position:relative; width:30px; left:452px; top: 0px; width: 86px;" 
     value="Create table" name="create"/>
<asp:ValidationSummary ID="ValidationSummary2" ForeColor="Red" runat="server" 
    style="margin-left: 142px" />
    <asp:SqlDataSource ID="sql" runat="server" 
     ConnectionString="<%$ ConnectionStrings:db_compilerConnectionString %>" 

     SelectCommand="SELECT [Column_Name], [Data_Type], [Allow_Null_], [Primary_Key_], [Date] FROM [tbl_field]"
     DeleteCommand="DELETE  FROM [tbl_field] WHERE [Field_id]=@field" InsertCommand="INSERT INTO [tbl_field] ([Column_Name],[Data_Type],[Database_id],[Allow_Null_],[Primary_Key_])Values (@ColumnName,@Dtype,@id,@null,@primary)"
     UpdateCommand="UPDATE [tbl_field] SET [Column_Name]=@ColumnName,[Data_Type]=@Dtype,[Database_id]=@id,[Allow_Null_]=@null,[Primary_Key_]=@primary">
     <DeleteParameters>
     <asp:Parameter Name="field" Type="Int32" />
     </DeleteParameters>
     <InsertParameters>
     <asp:Parameter Name="ColumnName" Type="String" />
      <asp:Parameter Name="Dtype" Type="String" />
       <asp:Parameter Name="id" Type="String" />
        <asp:Parameter Name="null" Type="Boolean" />
         <asp:Parameter Name="primary" Type="Boolean" />


     </InsertParameters>
     <UpdateParameters>
      <asp:Parameter Name="ColumnName" Type="String" />
      <asp:Parameter Name="Dtype" Type="String" />
       <asp:Parameter Name="id" Type="String" />
        <asp:Parameter Name="null" Type="Boolean"/>
         <asp:Parameter Name="primary" Type="Boolean" />

     </UpdateParameters>

 </asp:SqlDataSource>

這是我的aspx.cs代碼:

public void lbinssert(Object sender,EventArgs e)
{
    sql.InsertParameters["ColumnName"].DefaultValue =
        ((TextBox)GridView1.FooterRow.FindControl("txtColName")).Text;
    sql.InsertParameters["Dtype"].DefaultValue =
        ((DropDownList)GridView1.FooterRow.FindControl("DropDownList2")).Text;
    sql.InsertParameters["id"].DefaultValue =
       ((DropDownList)GridView1.FooterRow.FindControl("DropDownList2")).Text;
    sql.InsertParameters["null"].DefaultValue =
      ((CheckBox)GridView1.FooterRow.FindControl("nulll")).Checked == true ? "true" : "false";
    sql.InsertParameters["primary"].DefaultValue = ((CheckBox)GridView1.FooterRow.FindControl("primary")).Checked == true ? "true" : "false";

    sql.Insert();
   }

我建議以下解決方案:

考慮到您返回的數據表將通過測試它包含零記錄dataTable.Rows.Count == 0

當上面的dataTable返回零記錄時,然后運行以下代碼:

if(dataTable.Rows.Count == 0)
{
  FixGridFooter(dataTable);
}
else
{
   GridView1.DataSource = datatable;
   GridView1.DataBind();
}

該方法將虛擬記錄添加到數據表,然后綁定到Gridview並顯示在頁腳中。

private void FixGridFooter(DataTable dataSource)
{
    //add blank row to the the resultset
    dataSource.Rows.Add(dataSource.NewRow());
    dataSource.Rows[0]["Value1"] = 0;
    dataSource.Rows[0]["Value2"] = "";
    dataSource.Rows[0]["RecordDate"] = DateTime.Now.ToString("dd MMM yyyy");
    dataSource.Rows[0]["Checked"] = false;
    GridView1.DataSource = dataSource;
    GridView1.DataBind();

    //hide empty row - if you want to display it on an event like a button click else it will display as per default.
    GridView1.Rows[0].Visible = false;
 }

然后,通過<asp:TemplateField>FooterTemplate插入新記錄。

當你有事件或在加載事件中,你可以調用GridView1.ShowFooter = true; 當數據表最終返回記錄時, ShowFooter可以再次設置為不可見。

這是一個非常快速和骯臟的解決方案。 顯然可以做很多優化,但我會離開而不是你。

在頁腳tamplte中將是一個帶有CommandName="Insert"的按鈕插入。 在RowCommand事件中,您將測試命令名稱,然后從行中檢索值以進行插入

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                if (e.CommandName.Equals("Insert")
                {
                    //insert code
                    var returnString = GridView1.FooterRow.FindControl("txtValue") as TextBox;
                    GridView1.ShowFooter = false;
                }
}

UpdateDelete您可以通過設計器屬性中的標准GridView設置添加並相應地添加功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM