2016-04-11 3 views
1

Ich arbeite an meinem SQL-Projekt, ich habe eine Gridview erstellt, in der ich die Werte in der Gridview-Fußzeile gemäß Tabellenspalten gebunden habe.Wie zeigt man die Gridview-Fußzeile an, die durch Tabellenspalten begrenzt ist und die Tabelle leer ist? ASP.NET C#

Im Grunde erstellen ich eine Gridview, in der Benutzer Werte einfügen und eine Tabelle erstellen. Aber, ich habe ein Problem, wenn die Tabelle 'Ein' Datensatz oder mehr als einen Datensatz enthält, dann funktioniert es gut, aber ich will, dass wenn Tabelle leer dann Fußzeile von Gridview anzeigen, die "Textfelder", "Kontrollkästchen" und "Dropdownliste enthält ".

Wenn Tabelle einen Datensatz enthält dann diese Gridview-Show, es funktioniert gut, hier ist

image

Wenn Tabelle keine Daten enthält, dann ist diese Gridview zeigen

image

Wie kann ich zeigen Sie diese Art von Rasteransicht

image

Wenn die Tabelle keine Daten enthält, so dass Benutzer Werte einfügen und Tabelle erstellen?

Hier ist meine ASPX-Markup:

<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][email protected]" 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][email protected],[Data_Type][email protected],[Database_id][email protected],[Allow_Null_][email protected],[Primary_Key_][email protected]"> 
    <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> 

Hier ist mein aspx.cs Code:

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

Antwort

0

Ich würde die folgende Lösung vorschlagen:

zu berücksichtigen, dass die Datentabelle Sie return enthält null Datensätze, indem es dataTable.Rows.Count == 0 getestet wird.

Wenn die obige datatable kehrt null Datensätze dann unter dem Codestück auszuführen:

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

Das Verfahren fügt einen Dummy-Datensatz in eine Datentabelle und dann an das Gridview gebunden und in der Fußzeile angezeigt.

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; 
} 

Der Einsatz neuer Datensätze werden dann über die FooterTemplate innerhalb des <asp:TemplateField> passieren.

Wenn Sie ein Ereignis haben oder im Ladeereignis sind, können Sie GridView1.ShowFooter = true; anrufen. Wenn die Datentabelle schließlich Datensätze zurückgibt, kann die ShowFooter wieder auf unsichtbar gesetzt werden.

Dies ist eine sehr schnelle und schmutzige Lösung. Offensichtlich können viele Optimierungen gemacht werden, aber ich werde als Sie gehen.

In der Fußzeile tampelte wird ein Knopf mit einer CommandName="Insert" einfügen. Im RowCommand Fall werden Sie für die Befehlsnamen testen und dann einfügen Wert aus den Reihen für

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; 
       } 
} 

Update und Delete Sie können über Standard-GridView Einstellungen in den Designer-Eigenschaften und fügen Funktionalität entsprechend hinzufügen abrufen.

+0

Dank lassen Sie mich – Saira

+0

überprüfen Aber ich will Werte einfügen Fußzeile des Gridview, aber Sie gab mir Lösung, die Felder in Gridview hinzugefügt, aber ich möchte einfügen , bearbeiten, löschen Daten in girdview von Daten binden Tabelle – Saira

+0

Sie haben Recht, aber Problem ist jedes Mal Tabelle ist nicht leer.Meine Tabelle enthält "Benutzer-ID" und jeder Benutzer kann Kiste Tabelle beim Laden Seite Tabelle enthält Daten und diese Methode ist nicht wann Tabelle enthält da ta, ich möchte, wenn Benutzer neue Tabelle erstellen dann diese Gridview zeigen, Benutzer kann Tabelle erstellen, – Saira

Verwandte Themen