首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

ASP.NET GridView行的添加删除不涉及数据库解决方案

2012-04-07 
ASP.NET GridView行的添加删除不涉及数据库Microsoft JScript 运行时错误: Sys.WebForms.PageRequestManag

ASP.NET GridView行的添加删除不涉及数据库
Microsoft JScript 运行时错误: Sys.WebForms.PageRequestManagerServerErrorException: 在位置 0 处没有任何行。

以上是错误提示,下面是后台代码:

public partial class WebForm3 : System.Web.UI.Page
  {
  public static DataTable Cpdt;
  protected void Page_Load(object sender, EventArgs e)
  {
  Createbt();
  if (!IsPostBack)
  {
  GridView1.DataSource = Cpdt;
  GridView1.DataBind();
  }
  }

  void Createbt()
  {
  Cpdt = new DataTable();
  DataColumn mycol = new DataColumn();
  Cpdt.Columns.Add(new DataColumn("CPID",typeof(Int32)));
  Cpdt.Columns.Add(new DataColumn("CPNAME",typeof(String)));
  Cpdt.Columns.Add(new DataColumn("CPDJ", typeof(Single)));
  Cpdt.Columns.Add(new DataColumn("SL", typeof(Int32)));
  Cpdt.Columns.Add(new DataColumn("CPSUM", typeof(Double)));
  Cpdt.AcceptChanges();
  Cpdt.PrimaryKey = new DataColumn[] { Cpdt.Columns[1] };
  Cpdt.AcceptChanges();
  }

  protected void Button1_Click(object sender, EventArgs e)
  {
  DataRow myrow = Cpdt.NewRow();
  myrow[0] = TextBox1.Text;
  myrow[1] = TextBox2.Text;
  myrow[2] =Convert.ToSingle(TextBox3.Text);
  myrow[3] = TextBox4.Text;
  Cpdt.Rows.Add(myrow);
  var mm=Cpdt.AsEnumerable().Sum(p=>Convert.ToDouble( p["SL"]));
  Label3.Text = mm.ToString();
  Cpdt.AcceptChanges();
  GridView1.DataSource = Cpdt;
  GridView1.DataBind();
  }

  protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
  {
  int rowkey = e.RowIndex;
  Cpdt.Rows.RemoveAt(rowkey);
  Cpdt.AcceptChanges();
  GridView1.EditIndex = -1;
  GridView1.DataSource = Cpdt;
  GridView1.DataBind();

  // //Cpdt.Rows[e.RowIndex].Delete();
  // //GridView1.DataSource = Cpdt;
  // //GridView1.DataBind();
  // //当前点击删除行的行号
  }
  }


把前台的也贴上来吧,这小问题困了我好久了,郁闷死。


<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
  DataKeyNames="CPID"  
  onrowdeleting="GridView1_RowDeleting" 
  >
  <Columns>
  <asp:BoundField DataField="CPID" HeaderText="产品编号" ReadOnly="True" 
  SortExpression="CPID" />
  <asp:BoundField DataField="CPNAME" HeaderText="产品名" ReadOnly="True" 
  SortExpression="CPNAME" />
  <asp:BoundField DataField="CPDJ" HeaderText="产品单价" ReadOnly="True" 
  SortExpression="CPDJ" />
  <asp:TemplateField HeaderText="数量" SortExpression="SL">
  <FooterTemplate>
  <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>


  </FooterTemplate>
  <ItemTemplate>
  <asp:Label ID="Label1" runat="server" Text='<%# Bind("SL") %>'></asp:Label>
  </ItemTemplate>
  <EditItemTemplate>
  <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("SL") %>'></asp:TextBox>
  </EditItemTemplate>
  </asp:TemplateField>
  <asp:CommandField ShowSelectButton="True" />
  <asp:CommandField ShowDeleteButton="True" />
  <asp:ButtonField ButtonType="Button" CommandName="Delete" Text="按钮" />
  </Columns>

  </asp:GridView>


另外,无刷新控件已经放好了,这里就略了。


问题在于:按按钮添加的时候,就只是一行,不会增加,如果修改输入数据,那等于更新数据而已。但是我注意到了DataRow myrow = Cpdt.NewRow();
之类的语句,应该是新增的啊,不知道为什么。
删除的时候,提取选中的行,然后删除对应的数据源行,然后就重新绑定,我不知道我还能做什么。

[解决办法]
这就是提示你值为空。就是在那一行不存在数据。你设置个短点调试一下
[解决办法]
在位置 0 处没有任何行。

在没有行的时候判断Gridview的RowCount 如果等于0给个提示框。

尽量少用Gridview

热点排行