C# 无法访问DataTable值(即使没有定义的表架构)
ASP.Net:C# 无法访问DataTable值(即使没有定义的表架构),c#,asp.net,gridview,datatable,C#,Asp.net,Gridview,Datatable,ASP.Net: <asp:GridView id ="sampleGridView" AutoGenerateEditButton ="True" OnRowEditing ="sampleGridView_RowEditing" OnRowCancelingEdit ="sampleGridView_RowCancelingEdit" OnRowUpdating ="sampleGridView_RowUpdating" runat ="server"></asp:Grid
<asp:GridView id ="sampleGridView" AutoGenerateEditButton ="True" OnRowEditing ="sampleGridView_RowEditing" OnRowCancelingEdit ="sampleGridView_RowCancelingEdit" OnRowUpdating ="sampleGridView_RowUpdating" runat ="server"></asp:GridView>
我试着用下面的代码注释掉上面生成代码的错误
Response.Write(dt.Columns.Count+" "+dt.TableName);
输出为:0可抽样
为什么无法访问datatable值?我认为您应该尝试使用以下方式在表中添加行:
for (int i = 0; i < src.GetLength(0); i++)
{
DataRow dr = dt.NewRow();
dr[0] = src[i, 0];
dr[1] = src[i, 1];
dr[2] = src[i, 2];
dt.Rows.Add(dr);
}
sampleGridView.DataSource = dt;
sampleGridView.DataBind();
for(int i=0;i
当您手动填充页面的成员时,如果需要在回发之间保留,您需要对每个请求执行此操作。这通常是使用会话状态完成的
比如说
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack){
PopulateGridView();
}
else
{
dt = (DataTable)Session["YourDatatable"]; //retrieve it from session
sampleGridView.DataSource = dt;
sampleGridView.DataBind();
}
}
private void PopulateGridView()
{
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Desgnation", typeof(string));
dt.Columns.Add("City", typeof(string));
for (int i = 0; i < src.GetLength(0); i++)
{
dt.Rows.Add(src[i, 0], src[i, 1], src[i, 2]);
}
sampleGridView.DataSource = dt;
sampleGridView.DataBind();
Session["YourDatatable"] = dt; //Store it for later
}
受保护的无效页面加载(对象发送方,事件参数e)
{
如果(!IsPostBack){
PopulateGridView();
}
其他的
{
dt=(DataTable)会话[“YourDatatable”];//从会话中检索它
sampleGridView.DataSource=dt;
sampleGridView.DataBind();
}
}
私有void PopulateGridView()
{
添加(“名称”,类型(字符串));
dt.Columns.Add(“Desgnation”,typeof(string));
添加(“城市”,类型(字符串));
for(int i=0;i
这是一个猜测,因为您的源代码不完整。您是否记得调用PopulateGridView或从某个位置获取数据表,例如postbacksdatatable上的会话变量不是会话变量。它是类的成员变量问题不在于Add()方法的语法。问题是datatable对象中既没有列也没有行(表示没有数据)。请尝试在datatable对象中声明为受保护的,而不是私有的。然后查看发生了什么?
for (int i = 0; i < src.GetLength(0); i++)
{
DataRow dr = dt.NewRow();
dr[0] = src[i, 0];
dr[1] = src[i, 1];
dr[2] = src[i, 2];
dt.Rows.Add(dr);
}
sampleGridView.DataSource = dt;
sampleGridView.DataBind();
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack){
PopulateGridView();
}
else
{
dt = (DataTable)Session["YourDatatable"]; //retrieve it from session
sampleGridView.DataSource = dt;
sampleGridView.DataBind();
}
}
private void PopulateGridView()
{
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Desgnation", typeof(string));
dt.Columns.Add("City", typeof(string));
for (int i = 0; i < src.GetLength(0); i++)
{
dt.Rows.Add(src[i, 0], src[i, 1], src[i, 2]);
}
sampleGridView.DataSource = dt;
sampleGridView.DataBind();
Session["YourDatatable"] = dt; //Store it for later
}