在gridview中创建新行时销毁行数据 [英] destroy row data while create new row inside gridview

查看:46
本文介绍了在gridview中创建新行时销毁行数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我正在使用radControl Radgrid并尝试在gridview中创建动态行,但是当我单击newitem按钮时创建新行时,最后一行数据被破坏.

再次在新行中插入数据后,再次单击newitem按钮,所有数据都将销毁.

请告诉我原因. 如果有任何解决方案,请告诉我.

谢谢

aspx代码为

< asp:按钮ID ="btnAdd" runat =服务器" Text ="Add" OnClick ="btnAdd_click" Width ="70px"/>
< br/>
< telerik:RadGrid ShowFooter ="true" ID ="radGrid1" runat ="server" OnInsertCommand ="radGrid1_InsertCommand"
OnPreRender ="radgrid1_PreRender" AutoGenerateColumns ="False" GridLines ="None"
AutoGenerateEditColumn ="true" AllowAutomaticUpdates ="true" AllowMultiRowEdit ="True" AllowAutomaticInserts ="true"
OnItemDataBound ="radGrid1_ItemDataBound" OnNeedDataSource ="radGrid1_NeedDataSource">
< MasterTableView EditMode ="EditForms" PageSize ="5" CommandItemDisplay ="None">
<专栏>
< telerik:GridTemplateColumn DataField ="rowNumber" HeaderText ="S.No.">
< ItemTemplate>
< asp:标签ID ="lblrowNumber" runat =服务器" Text =''<%#Eval("rowNumber")%>''></asp:Label>
</ItemTemplate>
</telerik:GridTemplateColumn>

< telerik:GridTemplateColumn UniqueName ="Product_Name" ReadOnly ="true" HeaderText =产品名称">
< ItemTemplate>
< asp:DropDownList ID ="ddl1" runat ="server" AutoPostBack ="true" DataTextField ="product_Name"
DataValueField ="product_Name" OnSelectedIndexChanged ="ddl1_SelectedIndexChanged">
</asp:DropDownList>
</ItemTemplate>
</telerik:GridTemplateColumn>
< telerik:GridTemplateColumn UniqueName ="Product_Rate" ReadOnly ="true" HeaderText ="Product Rate">
< ItemTemplate>
< asp:Label ID ="lblRate" runat ="server" Text =''<%#Eval("Product_Rate")%>''></asp:Label>
</ItemTemplate>
</telerik:GridTemplateColumn>
< telerik:GridTemplateColumn UniqueName ="Product_Quantity" HeaderText =产品数量">
< ItemTemplate>
< telerik:RadNumericTextBox ID ="txtQuantity" AutoPostBack ="true" runat ="server" OnTextChanged ="txtQuantity_TextChanged">
</telerik:RadNumericTextBox>
</ItemTemplate>
</telerik:GridTemplateColumn>
< telerik:GridTemplateColumn UniqueName ="Product_Amount" ReadOnly ="true" HeaderText ="Product Amount">
< ItemTemplate>
< asp:标签ID ="lblAmount" runat =服务器"></asp:标签>
</ItemTemplate>
< FooterStyle Horizo​​ntalAlign ="Right"/>
< FooterTemplate>
< asp:Button ID ="btnNewRow" runat ="server" Visible ="true" Text ="Add Item" OnClick ="btnNewRow_click"/></FooterTemplate>
</telerik:GridTemplateColumn>
</列>
</MasterTableView>
</telerik:RadGrid>
< table border ="0" cellpadding ="0" cellspacing ="0" width ="100%">
< tr>
< td align ="center">
< center>
< asp:按钮ID ="btnSubmit" runat =服务器" Text ="Submit" OnClick ="Submit"/>
< asp:Button ID ="Button1" runat =服务器" Text =清除" OnClick =清除"/>
</center>
</td>
</tr>
</table>


CSS代码是...

公共局部类Test_Order:System.Web.UI.Page
{
DataTable dt = new DataTable();
TableRow dr;

受保护的void Page_Load(对象发送者,EventArgs e)
{
如果(!IsPostBack)
{
create_datatable();
}
}
公共无效create_datatable()
{

dr = new TableRow();
dt.Columns.Add(new DataColumn("rowNumber",typeof(string)));
dt.Columns.Add("Product_Name");
dt.Columns.Add("Product_Rate");
dt.Columns.Add("Product_Quantity");
dt.Columns.Add("Product_Amount");
ViewState ["Address"] = dt;

radGrid1.DataSource = dt;
radGrid1.DataBind();

}

受保护的void radGrid1_NeedDataSource(对象源,GridNeedDataSourceEventArgs e)
{
SqlConnection连接=新的SqlConnection();
connection =新的SqlConnection(ConfigurationManager.ConnectionStrings ["chalk_hillConnectionString"].ConnectionString);
SqlDataAdapter da =新的SqlDataAdapter();
da.SelectCommand =新的SqlCommand(从product_detail中选择product_id,product_name",连接);


for(int i = 0; i< dt.Rows.Count; i ++)
{
dt.Rows.Add(dr);
dt.AcceptChanges();
试试
{
da.Fill(dt);
}
终于
{
connection.Close();
}
}
radGrid1.DataSource = dt;

}

受保护的void radGrid1_ItemDataBound(对象发送者,GridItemEventArgs e)
{
如果(e.Item是GridDataItem)
{
GridDataItem item =(GridDataItem)e.Item;
DropDownList列表=(DropDownList)item.FindControl("ddl1");
list.Items.Insert(0,new ListItem("select","-1"));
SqlConnection con =新的SqlConnection(ConfigurationManager.ConnectionStrings ["chalk_hillConnectionString"].ConnectionString);
SqlDataAdapter da =新的SqlDataAdapter();
da.SelectCommand = new SqlCommand(从product_detail中选择product_id,product_name",等);
DataSet ds = new DataSet();
da.Fill(ds);
如果(ds!= null)
{
list.DataSource = ds;
list.DataTextField =产品名称";
list.DataValueField ="product_id";
list.DataBind();
}
list.Items.Insert(0,new ListItem("Select Item ..","0"));
list.SelectedIndex = 0;
}
}

受保护的void radGrid1_InsertCommand(对象发送者,EventArgs e)
{
isinsert = true;
}
受保护的void ddl1_SelectedIndexChanged(对象发送者,EventArgs e)
{
DropDownList list =(DropDownList)sender;
GridDataItem item =(GridDataItem)list.NamingContainer;
SqlConnection con =新的SqlConnection(ConfigurationManager.ConnectionStrings ["chalk_hillConnectionString"].ConnectionString);
con.Open();
SqlCommand cmd =新的SqlCommand(从product_detail中选择product_rate,其中product_name ="" + list.SelectedItem.Text +'',con));
SqlDataReader阅读器; ;
reader = cmd.ExecuteReader();
如果(reader.Read())
{
(item.FindControl("lblRate")作为标签).Text= reader ["product_rate"].ToString();
}

}

受保护的void txtQuantity_TextChanged(对象发送者,EventArgs e)
{
RadNumericTextBox textQuantity =发送者为RadNumericTextBox;

GridEditableItem item = textQuantity.NamingContainer as GridEditableItem;
标签lbl1 = item ["Product_Rate"].FindControl("lblRate")作为标签;
标签lbl3 = item ["Product_Amount"].FindControl("lblAmount")作为Label;
lbl3.Text =(int.Parse(lbl1.Text)* int.Parse(textQuantity.Text)).ToString();
create_datatable_row();

}
受保护的无效btnNewRow_click(对象发送者,EventArgs e)
{
AddNewRowToGrid();
}

私有无效AddNewRowToGrid()
{

如果(ViewState ["Address"]!= null)
{
DataTable dtCurrenttable =(DataTable)ViewState ["Address"];
DataRow drCurrentRow = null;
如果(dtCurrenttable.Rows.Count> 0)
{
drCurrentRow = dtCurrenttable.NewRow();
drCurrentRow ["rowNumber"] = dtCurrenttable.Rows.Count +1;
dtCurrenttable.Rows.Add(drCurrentRow);
ViewState ["Address"] = dtCurrenttable;
radGrid1.DataSource = dtCurrenttable;
radGrid1.DataBind();
}
}
其他
{
Response.Write("ViewState为null");
}
}

//用于在单击按钮创建时显示空白网格....

受保护的无效btnAdd_click(对象发送者,EventArgs e)
{

dt =(DataTable)ViewState ["Address"];
如果(dt.Rows.Count!= 0)
{
如果(dt.Columns.Count!= 0)
{
create_datatable();
}
其他
{
create_datatable_row();
}
}
DataRow dr = dt.NewRow();
dr ["rowNumber"] = 1;
dt.Rows.Add(dr);
radGrid1.DataSource = dt;
radGrid1.DataBind();
}
私有void create_datatable_row()
{
DataRow dr = dt.NewRow();
dt.Rows.Add(dr);
}
bool isinsert = false;
受保护的void radgrid1_PreRender(对象发送者,EventArgs e)
{
如果(isinsert)
{
isinsert = false;
radGrid1.MasterTableView.IsItemInserted = true;
radGrid1.MasterTableView.Rebind();
}

}


}

现在,只需经历一下,然后告诉我这个问题,实际上我不是很了解gridview,我是在书籍和这个论坛的帮助下完成任务的.我是开发的新手.

Hi,

I am using radControl Radgrid and trying to create a dynamic row inside gridview but when I create a new row on click of newitem button then last row of data is destroyed.

After inserting data in new row again click on newitem button again all data destroyed.

Please tell me the reason.
If there are any solutions please let me know.

Thanks

aspx code is

<asp:Button ID="btnAdd" runat="server" Text="Add" OnClick="btnAdd_click" Width="70px" />
<br />
<telerik:RadGrid ShowFooter="true" ID="radGrid1" runat="server" OnInsertCommand="radGrid1_InsertCommand"
OnPreRender="radgrid1_PreRender" AutoGenerateColumns="False" GridLines="None"
AutoGenerateEditColumn="true" AllowAutomaticUpdates="true" AllowMultiRowEdit="True" AllowAutomaticInserts="true"
OnItemDataBound="radGrid1_ItemDataBound" OnNeedDataSource="radGrid1_NeedDataSource">
<MasterTableView EditMode="EditForms" PageSize="5" CommandItemDisplay="None">
<Columns>
<telerik:GridTemplateColumn DataField="rowNumber" HeaderText="S.No.">
<ItemTemplate>
<asp:Label ID="lblrowNumber" runat="server" Text=''<%#Eval("rowNumber")%>''></asp:Label>
</ItemTemplate>
</telerik:GridTemplateColumn>

<telerik:GridTemplateColumn UniqueName="Product_Name" ReadOnly="true" HeaderText="Product Name">
<ItemTemplate>
<asp:DropDownList ID="ddl1" runat="server" AutoPostBack="true" DataTextField="product_Name"
DataValueField="product_Name" OnSelectedIndexChanged="ddl1_SelectedIndexChanged">
</asp:DropDownList>
</ItemTemplate>
</telerik:GridTemplateColumn>
<telerik:GridTemplateColumn UniqueName="Product_Rate" ReadOnly="true" HeaderText="Product Rate">
<ItemTemplate>
<asp:Label ID="lblRate" runat="server" Text=''<%#Eval("Product_Rate") %>''></asp:Label>
</ItemTemplate>
</telerik:GridTemplateColumn>
<telerik:GridTemplateColumn UniqueName="Product_Quantity" HeaderText="Product Quantity">
<ItemTemplate>
<telerik:RadNumericTextBox ID="txtQuantity" AutoPostBack="true" runat="server" OnTextChanged="txtQuantity_TextChanged">
</telerik:RadNumericTextBox>
</ItemTemplate>
</telerik:GridTemplateColumn>
<telerik:GridTemplateColumn UniqueName="Product_Amount" ReadOnly="true" HeaderText="Product Amount">
<ItemTemplate>
<asp:Label ID="lblAmount" runat="server"></asp:Label>
</ItemTemplate>
<FooterStyle HorizontalAlign="Right" />
<FooterTemplate>
<asp:Button ID="btnNewRow" runat="server" Visible="true" Text="Add Item" OnClick="btnNewRow_click" /></FooterTemplate>
</telerik:GridTemplateColumn>
</Columns>
</MasterTableView>
</telerik:RadGrid>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td align="center">
<center>
<asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClick="Submit" />
<asp:Button ID="Button1" runat="server" Text="Clear" OnClick="Clear" />
</center>
</td>
</tr>
</table>


css code is...

public partial class Test_Order : System.Web.UI.Page
{
DataTable dt = new DataTable();
TableRow dr;

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
create_datatable();
}
}
public void create_datatable()
{

dr = new TableRow();
dt.Columns.Add(new DataColumn("rowNumber", typeof(string)));
dt.Columns.Add("Product_Name");
dt.Columns.Add("Product_Rate");
dt.Columns.Add("Product_Quantity");
dt.Columns.Add("Product_Amount");
ViewState["Address"] = dt;

radGrid1.DataSource = dt;
radGrid1.DataBind();

}

protected void radGrid1_NeedDataSource(object source, GridNeedDataSourceEventArgs e)
{
SqlConnection connection = new SqlConnection();
connection = new SqlConnection(ConfigurationManager.ConnectionStrings["chalk_hillConnectionString"].ConnectionString);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = new SqlCommand("select product_id,product_name from product_detail", connection);


for (int i = 0; i < dt.Rows.Count; i++)
{
dt.Rows.Add(dr);
dt.AcceptChanges();
try
{
da.Fill(dt);
}
finally
{
connection.Close();
}
}
radGrid1.DataSource = dt;

}

protected void radGrid1_ItemDataBound(object sender, GridItemEventArgs e)
{
if (e.Item is GridDataItem)
{
GridDataItem item = (GridDataItem)e.Item;
DropDownList list = (DropDownList)item.FindControl("ddl1");
list.Items.Insert(0, new ListItem("select", "-1"));
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["chalk_hillConnectionString"].ConnectionString);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = new SqlCommand("select product_id,product_name from product_detail", con);
DataSet ds = new DataSet();
da.Fill(ds);
if (ds != null)
{
list.DataSource = ds;
list.DataTextField = "product_name";
list.DataValueField = "product_id";
list.DataBind();
}
list.Items.Insert(0, new ListItem("Select Item..", "0"));
list.SelectedIndex = 0;
}
}

protected void radGrid1_InsertCommand(object sender, EventArgs e)
{
isinsert = true;
}
protected void ddl1_SelectedIndexChanged(object sender, EventArgs e)
{
DropDownList list = (DropDownList)sender;
GridDataItem item = (GridDataItem)list.NamingContainer;
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["chalk_hillConnectionString"].ConnectionString);
con.Open();
SqlCommand cmd = new SqlCommand("select product_rate from product_detail where product_name=''" + list.SelectedItem.Text + "''", con);
SqlDataReader reader; ;
reader = cmd.ExecuteReader();
if (reader.Read())
{
(item.FindControl("lblRate") as Label).Text = reader["product_rate"].ToString();
}

}

protected void txtQuantity_TextChanged(object sender, EventArgs e)
{
RadNumericTextBox textQuantity = sender as RadNumericTextBox;

GridEditableItem item = textQuantity.NamingContainer as GridEditableItem;
Label lbl1 = item["Product_Rate"].FindControl("lblRate") as Label;
Label lbl3 = item["Product_Amount"].FindControl("lblAmount") as Label;
lbl3.Text = (int.Parse(lbl1.Text) * int.Parse(textQuantity.Text)).ToString();
create_datatable_row();

}
protected void btnNewRow_click(object sender, EventArgs e)
{
AddNewRowToGrid();
}

private void AddNewRowToGrid()
{

if (ViewState["Address"] != null)
{
DataTable dtCurrenttable = (DataTable)ViewState["Address"];
DataRow drCurrentRow = null;
if (dtCurrenttable.Rows.Count > 0)
{
drCurrentRow = dtCurrenttable.NewRow();
drCurrentRow["rowNumber"] = dtCurrenttable.Rows.Count + 1;
dtCurrenttable.Rows.Add(drCurrentRow);
ViewState["Address"] = dtCurrenttable;
radGrid1.DataSource = dtCurrenttable;
radGrid1.DataBind();
}
}
else
{
Response.Write("ViewState is null");
}
}

//for display blank grid on button click creation....

protected void btnAdd_click(object sender, EventArgs e)
{

dt = (DataTable)ViewState["Address"];
if (dt.Rows.Count != 0)
{
if (dt.Columns.Count != 0)
{
create_datatable();
}
else
{
create_datatable_row();
}
}
DataRow dr = dt.NewRow();
dr["rowNumber"] = 1;
dt.Rows.Add(dr);
radGrid1.DataSource = dt;
radGrid1.DataBind();
}
private void create_datatable_row()
{
DataRow dr = dt.NewRow();
dt.Rows.Add(dr);
}
bool isinsert = false;
protected void radgrid1_PreRender(object sender, EventArgs e)
{
if (isinsert)
{
isinsert = false;
radGrid1.MasterTableView.IsItemInserted = true;
radGrid1.MasterTableView.Rebind();
}

}


}

now just gothrough and tell me the issue actually i am not very much aware gridview i doing my task with the help of books and this forum. i am new in development.

推荐答案

嗨!您可以在此处粘贴代码吗?
Hi! Can you paste your code here??


这篇关于在gridview中创建新行时销毁行数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆