Comment ajouter de nouvelles lignes de la grille sans effacer les données existantes
Mon Code avec succès ajoute de nouvelles lignes à la gridview sur le bouton de la souris, mais efface toutes les valeurs saisies dans des lignes existantes. Je comprends que les données doivent être stockées dans un état d'affichage, mais je ne sais pas où/comment atteindre cet objectif.
ASPX:
<asp:GridView ID="gvCommissions" runat="server" AutoGenerateColumns="False"
CellPadding="4" ForeColor="#333333" AutoGenerateDeleteButton="True">
<Columns>
<asp:TemplateField HeaderText="S.NO" ItemStyle-Width="5%">
<ItemTemplate>
<asp:Label ID="lblSno" runat="server" Width="98%"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="NAME" ItemStyle-Width="30%">
<ItemTemplate>
<asp:TextBox ID="txtName" runat="server" Width="98%"></asp:TextBox>
</ItemTemplate>
</Columns>
</asp:GridView>
CODE DERRIÈRE:
DataTable dt;
protected void Page_Load(object sender, EventArgs e)
{
if(ViewState["gvCommissions"] != null)
dt = (DataTable)ViewState["gvCommissions"];
if (!Page.IsPostBack)
{
GridViewStructure();
AddNewRow();
}
else
{
dt = (DataTable)ViewState["gvCommissions"];
}
ViewState["gvCommissions"] = dt;
}
private void GridViewStructure()
{
dt = new DataTable();
dt.Columns.Add("sno");
dt.Columns.Add("name");
}
private void AddNewRow()
{
dt = new DataTable();
dt.Columns.Add("sno");
dt.Columns.Add("name");
foreach (GridViewRow gvRow in gvCommissions.Rows)
{
DataRow drCurrentRow = dt.NewRow();
drCurrentRow["sno"] = ((Label)gvRow.FindControl("lblSno")).Text;
drCurrentRow["name"] = ((TextBox)gvRow.FindControl("txtName")).Text;
dt.Rows.Add(drCurrentRow);
}
DataRow dr = dt.NewRow();
dr["sno"] = "";
dr["name"] = "";
dt.Rows.Add(dr);
gvCommissions.DataSource = dt;
gvCommissions.DataBind();
}
protected void btnAddRow_Click(object sender, EventArgs e)
{
AddNewRow();
}
Vous devez vous connecter pour publier un commentaire.
Simple de vérifier d'abord si il y a une ligne dans gridview ensuite ajouter des lignes de la valeur dans la datatable puis ajouter la ligne vide. Comme ci-dessous.
Vous avez manqué une partie. Chaque fois que la page est chargée, vous permet d'économiser de la table à la vue de l'état, et j'ai oublié de l'utiliser!
Essayer de le récupérer à partir de l'état d'affichage au chargement de la page comme ceci:
Une chose que je voudrais ajouter, c'est pas une bonne idée d'enregistrer la table dans la vue de l'état.