更新边界域中的数据(输入字符串的格式不正确。)
updating data in boundfield (Input string was not in a correct format.)
我有一个 viewproducts 页面,我想要的是单击编辑 link 时,将编辑两个字段(名称和价格)。这是我的 html 代码:
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" Text="Edit" runat="server" CommandName="Edit" />
</ItemTemplate>
<EditItemTemplate>
<asp:LinkButton ID="LinkButton2" Text="Update" runat="server" OnClick="OnUpdate" />
<asp:LinkButton ID="LinkButton3" Text="Cancel" runat="server" OnClick="OnCancel" />
</EditItemTemplate>
</asp:TemplateField>
和后面的代码:
private void GetProducts(int CategoryID)
{
ShoppingCart k = new ShoppingCart()
{
CategoryID = CategoryID
};
gdview.DataSource = null;
gdview.DataSource = k.GetAllProducts();
gdview.DataBind();
}
protected void OnRowEditing(object sender, GridViewEditEventArgs e)
{
gdview.EditIndex = e.NewEditIndex;
this.GetProducts(0);
}
protected void OnUpdate(object sender, EventArgs e)
{
GridViewRow row = (sender as LinkButton).NamingContainer as GridViewRow;
string Name = (row.Cells[0].Controls[0] as TextBox).Text;
string Price = (row.Cells[2].Controls[0] as TextBox).Text;
DataTable dt = ViewState["dt"] as DataTable;
dt.Rows[row.RowIndex]["Name"] = Name;
dt.Rows[row.RowIndex]["Price"] = Price;
ViewState["dt"] = dt;
gdview.EditIndex = -1;
this.GetProducts(0);
}
protected void OnCancel(object sender, EventArgs e)
{
gdview.EditIndex = -1;
this.GetProducts(0);
}
protected void gdview_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
if (Convert.ToInt32(e.Row.Cells[6].Text) < 50)
{
e.Row.Cells[0].BackColor = System.Drawing.Color.Red;
e.Row.Cells[0].ForeColor = System.Drawing.Color.White;
e.Row.Cells[6].BackColor = System.Drawing.Color.Red;
e.Row.Cells[6].ForeColor = System.Drawing.Color.White;
}
}
}
但是它给我一个错误提示:输入字符串的格式不正确。红色文字是:
if (Convert.ToInt32(e.Row.Cells[6].Text) < 50)
我在这里错过了什么?
这是网格视图代码:
<Columns>
<asp:BoundField HeaderText="Name" DataField="Name" SortExpression="Name" >
<ItemStyle Height="20px" Width="150px" />
</asp:BoundField>
<asp:BoundField HeaderText="ProductCategory " ReadOnly="true" DataField="CategoryName" SortExpression="CategoryNaame" >
<ItemStyle Height="20px" Width="150px" />
</asp:BoundField>
<asp:BoundField HeaderText="Price" DataField="Price" SortExpression="Price" >
<ItemStyle Height="20px" Width="150px" />
</asp:BoundField>
<asp:ImageField HeaderText ="ImageUrl" DataImageUrlField="ImageUrl" SortExpression="ImageUrl" ReadOnly="true" ControlStyle-Width ="10">
<ControlStyle Width="50px"></ControlStyle>
</asp:ImageField>
<asp:BoundField HeaderText="ProductQuantity" DataField="ProductQuantity" ReadOnly="true" SortExpression="ProductQuantity" >
<ItemStyle Height="20px" Width="150px" />
</asp:BoundField>
<asp:BoundField HeaderText="ProductSold" DataField="ProductSold" SortExpression="ProductSold" ReadOnly="true" >
<ItemStyle Height="20px" Width="150px" />
</asp:BoundField>
<asp:BoundField HeaderText="AvailableStock" DataField="AvailableStock" SortExpression="AvailableStock " ReadOnly="true" >
<ItemStyle Height="20px" Width="150px" />
</asp:BoundField>
编辑文本框可见时名称字段消失?
单元格中的文本为空,无法转换为 int
因此检查文本是否为空,然后将其转换为 int
if(!string.IsNullOrEmpty(e.Row.Cells[6].Text))
如果您不想让列可编辑,请设置 属性 ReadOnly="true"
ReadOnly="true"
例如,如果您要设置此列 ReadOnly="true"
<asp:BoundField HeaderText="Name" DataField="Name" SortExpression="Name" ReadOnly="true">
<ItemStyle Height="20px" Width="150px" />
</asp:BoundField>
我有一个 viewproducts 页面,我想要的是单击编辑 link 时,将编辑两个字段(名称和价格)。这是我的 html 代码:
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" Text="Edit" runat="server" CommandName="Edit" />
</ItemTemplate>
<EditItemTemplate>
<asp:LinkButton ID="LinkButton2" Text="Update" runat="server" OnClick="OnUpdate" />
<asp:LinkButton ID="LinkButton3" Text="Cancel" runat="server" OnClick="OnCancel" />
</EditItemTemplate>
</asp:TemplateField>
和后面的代码:
private void GetProducts(int CategoryID)
{
ShoppingCart k = new ShoppingCart()
{
CategoryID = CategoryID
};
gdview.DataSource = null;
gdview.DataSource = k.GetAllProducts();
gdview.DataBind();
}
protected void OnRowEditing(object sender, GridViewEditEventArgs e)
{
gdview.EditIndex = e.NewEditIndex;
this.GetProducts(0);
}
protected void OnUpdate(object sender, EventArgs e)
{
GridViewRow row = (sender as LinkButton).NamingContainer as GridViewRow;
string Name = (row.Cells[0].Controls[0] as TextBox).Text;
string Price = (row.Cells[2].Controls[0] as TextBox).Text;
DataTable dt = ViewState["dt"] as DataTable;
dt.Rows[row.RowIndex]["Name"] = Name;
dt.Rows[row.RowIndex]["Price"] = Price;
ViewState["dt"] = dt;
gdview.EditIndex = -1;
this.GetProducts(0);
}
protected void OnCancel(object sender, EventArgs e)
{
gdview.EditIndex = -1;
this.GetProducts(0);
}
protected void gdview_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
if (Convert.ToInt32(e.Row.Cells[6].Text) < 50)
{
e.Row.Cells[0].BackColor = System.Drawing.Color.Red;
e.Row.Cells[0].ForeColor = System.Drawing.Color.White;
e.Row.Cells[6].BackColor = System.Drawing.Color.Red;
e.Row.Cells[6].ForeColor = System.Drawing.Color.White;
}
}
}
但是它给我一个错误提示:输入字符串的格式不正确。红色文字是:
if (Convert.ToInt32(e.Row.Cells[6].Text) < 50)
我在这里错过了什么?
这是网格视图代码:
<Columns>
<asp:BoundField HeaderText="Name" DataField="Name" SortExpression="Name" >
<ItemStyle Height="20px" Width="150px" />
</asp:BoundField>
<asp:BoundField HeaderText="ProductCategory " ReadOnly="true" DataField="CategoryName" SortExpression="CategoryNaame" >
<ItemStyle Height="20px" Width="150px" />
</asp:BoundField>
<asp:BoundField HeaderText="Price" DataField="Price" SortExpression="Price" >
<ItemStyle Height="20px" Width="150px" />
</asp:BoundField>
<asp:ImageField HeaderText ="ImageUrl" DataImageUrlField="ImageUrl" SortExpression="ImageUrl" ReadOnly="true" ControlStyle-Width ="10">
<ControlStyle Width="50px"></ControlStyle>
</asp:ImageField>
<asp:BoundField HeaderText="ProductQuantity" DataField="ProductQuantity" ReadOnly="true" SortExpression="ProductQuantity" >
<ItemStyle Height="20px" Width="150px" />
</asp:BoundField>
<asp:BoundField HeaderText="ProductSold" DataField="ProductSold" SortExpression="ProductSold" ReadOnly="true" >
<ItemStyle Height="20px" Width="150px" />
</asp:BoundField>
<asp:BoundField HeaderText="AvailableStock" DataField="AvailableStock" SortExpression="AvailableStock " ReadOnly="true" >
<ItemStyle Height="20px" Width="150px" />
</asp:BoundField>
编辑文本框可见时名称字段消失?
单元格中的文本为空,无法转换为 int
因此检查文本是否为空,然后将其转换为 int
if(!string.IsNullOrEmpty(e.Row.Cells[6].Text))
如果您不想让列可编辑,请设置 属性 ReadOnly="true"
ReadOnly="true"
例如,如果您要设置此列 ReadOnly="true"
<asp:BoundField HeaderText="Name" DataField="Name" SortExpression="Name" ReadOnly="true">
<ItemStyle Height="20px" Width="150px" />
</asp:BoundField>