现在我正在寻找一种动态地向gridview添加行的方法。
这就是我的GridView在HTML中的样子:
<asp:GridView ID="gridView" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:BoundField AccessibleHeaderText="Zutaten" HeaderText="Zutaten"/>
<asp:BoundField AccessibleHeaderText="Menge" HeaderText="Menge" />
</Columns>
</asp:GridView>
<asp:Button ID="btnSubmit" Text="+" runat="server" CausesValidation="false" OnClientClick="Insert(); return false;"/>
这就是我尝试使用javascript:
在网格中插入新行的方法<script type="text/javascript" defer="defer">
function Insert()
{
var table = document.getElementById('<%=gridView.ClientID%>');
//Get values
var zutat = document.getElementById('<%=tbZutat.ClientID%>'); //this comes from other controls
var menge = document.getElementById('<%=tbMenge.ClientID%>'); //this comes from other controls
//Create Cells
var tr = document.createElement("tr");
var cell = document.createElement("td");
var cell2 = document.createElement("td");
cell.innerHTML = zutat.toString();
cell2.innerHTML = menge.toString();
tr.appendChild(cell);
tr.appendChild(cell2);
table.firstChild.appendChild(tr);
}
</script>
我甚至不知道这是否有效,因为当我运行它时,我在js-code的最后一行得到一个异常:
0x800a138f - JavaScript运行时错误:无法获取属性 未定义或空引用的“ firstChild ”。
顺便说一下,我还在我的Page_Load方法中将DataTable绑定到控件:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
SetInitialRow();
}
}
private void SetInitialRow()
{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("Zutat:", typeof(string)));
dt.Columns.Add(new DataColumn("Menge:", typeof(string)));
//Store the DataTable in ViewState
ViewState["ZutatenTable"] = dt;
gridViewZutaten.DataSource = dt;
gridViewZutaten.DataBind();
}
因此表变量始终为null。这是为什么?我忘记了什么?