现在我的数据库中有两个表:
jq_class1表:
字段:
id
class1_namejq_class2表:
字段:
id
class1_name
class2_name我现在用DataGrid控件做jq_class2的修改操作,
现在发现一个问题,class1_name要到jq_class1表里面取,而我的代码是到jq_class2里面取数据,我不知道应该如何修改代码:请大家帮忙!
我的.aspx部分代码如下:
<asp:TemplateColumn HeaderText="一级栏目名称">
<ItemTemplate>
<asp:Label id="oneLabel" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "class1_name") %>'>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList id="onename" Runat="server" DataSource="<%#dv%>" DataTextField="class1_name" DataValueField="class1_name" SelectedValue='<%# DataBinder.Eval(Container.DataItem, "class1_name") %>'>
</asp:DropDownList>
</EditItemTemplate>
</asp:TemplateColumn>.cs部分代码如下:
private void DataGridClass2_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
SqlConnection MyConnection = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]);
string UpdateCmd = "UPDATE jq_class2 SET class1_name=@SName, class2_name=@TName WHERE id=@uid";
SqlCommand MyCommand = new SqlCommand(UpdateCmd, MyConnection);
......
SqlParameter parm2=new SqlParameter("@SName",SqlDbType.NVarChar,30);
parm2.Value=((DropDownList)e.Item.FindControl("onename")).SelectedValue;
MyCommand.Parameters.Add(parm2);
......
MyCommand.Connection.Open();
MyCommand.ExecuteNonQuery();
MyConnection.Close();
DataGridClass2.EditItemIndex = -1;
MyCommand.Connection.Close();
BindGridToSource();
}private void BindGridToSource()
{
SqlConnection MyConnection = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]);
string sqlstring = "SELECT * FROM jq_class2 order by id desc";
SqlDataAdapter MyCommand = new SqlDataAdapter(sqlstring, MyConnection);
ataSet ds = new DataSet();
MyCommand.Fill(ds, "jq_class2");
dv = ds.Tables["jq_class2"].DefaultView;
DataGridClass2.DataSource=dv;
DataGridClass2.DataBind();
}请帮忙看看应该怎么改,第一次写,不胜感激!
jq_class1表:
字段:
id
class1_namejq_class2表:
字段:
id
class1_name
class2_name我现在用DataGrid控件做jq_class2的修改操作,
现在发现一个问题,class1_name要到jq_class1表里面取,而我的代码是到jq_class2里面取数据,我不知道应该如何修改代码:请大家帮忙!
我的.aspx部分代码如下:
<asp:TemplateColumn HeaderText="一级栏目名称">
<ItemTemplate>
<asp:Label id="oneLabel" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "class1_name") %>'>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList id="onename" Runat="server" DataSource="<%#dv%>" DataTextField="class1_name" DataValueField="class1_name" SelectedValue='<%# DataBinder.Eval(Container.DataItem, "class1_name") %>'>
</asp:DropDownList>
</EditItemTemplate>
</asp:TemplateColumn>.cs部分代码如下:
private void DataGridClass2_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
SqlConnection MyConnection = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]);
string UpdateCmd = "UPDATE jq_class2 SET class1_name=@SName, class2_name=@TName WHERE id=@uid";
SqlCommand MyCommand = new SqlCommand(UpdateCmd, MyConnection);
......
SqlParameter parm2=new SqlParameter("@SName",SqlDbType.NVarChar,30);
parm2.Value=((DropDownList)e.Item.FindControl("onename")).SelectedValue;
MyCommand.Parameters.Add(parm2);
......
MyCommand.Connection.Open();
MyCommand.ExecuteNonQuery();
MyConnection.Close();
DataGridClass2.EditItemIndex = -1;
MyCommand.Connection.Close();
BindGridToSource();
}private void BindGridToSource()
{
SqlConnection MyConnection = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]);
string sqlstring = "SELECT * FROM jq_class2 order by id desc";
SqlDataAdapter MyCommand = new SqlDataAdapter(sqlstring, MyConnection);
ataSet ds = new DataSet();
MyCommand.Fill(ds, "jq_class2");
dv = ds.Tables["jq_class2"].DefaultView;
DataGridClass2.DataSource=dv;
DataGridClass2.DataBind();
}请帮忙看看应该怎么改,第一次写,不胜感激!
private void DataGridClass2_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
SqlConnection Conn = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]);
string sqlstring1 = "SELECT * FROM jq_class1 order by id desc";
SqlDataAdapter Comm = new SqlDataAdapter(sqlstring1, Conn);
DataSet dsone = new DataSet();
Comm.Fill(dsone, "jq_class1");
dvone = dsone.Tables["jq_class1"].DefaultView;
DropDownList oneclasslist=(DropDownList)e.Item.FindControl("onename");
oneclasslist.DataSource=dvone;
oneclasslist.DataTextField="class1_name";
oneclasslist.DataValueField="class1_name";
oneclasslist.DataBind();
oneclasslist.Items.FindByValue(Convert.ToString(DataBinder.Eval(e.Item.DataItem,"class1_name"))).Selected=true;
}
报错:
“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误:
行 154: dvone = dsone.Tables["jq_class1"].DefaultView;
行 155: DropDownList oneclasslist=(DropDownList)e.Item.FindControl("onename");
行 156: oneclasslist.DataSource=dvone;
行 157: oneclasslist.DataTextField="class1_name";
行 158: oneclasslist.DataValueField="class1_name";
源文件: e:\aspnet\manage\manageclass2.aspx.cs 行: 156
这是怎么回事啊?
private void DataGridClass2_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem )
{SqlConnection Conn = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]);
string sqlstring1 = "SELECT * FROM jq_class1 order by id desc";
SqlDataAdapter Comm = new SqlDataAdapter(sqlstring1, Conn);
DataSet dsone = new DataSet();
Comm.Fill(dsone, "jq_class1");
dvone = dsone.Tables["jq_class1"].DefaultView;
DropDownList oneclasslist=(DropDownList)e.Item.FindControl("onename");
oneclasslist.DataSource=dvone;
oneclasslist.DataTextField="class1_name";
oneclasslist.DataValueField="class1_name";
oneclasslist.DataBind();
oneclasslist.Items.FindByValue(Convert.ToString(DataBinder.Eval(e.Item.DataItem,"class1_name"))).Selected=true;}}
{
}中,DataGrid有好几种列,具体的ListItemType点就出来了,但是Header 和Footer是没有数据的,也就是DropDownList oneclasslist=(DropDownList)e.Item.FindControl("onename");返回的事null值。
可是还是报错,报错内容和原来一样
“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误:
行 160: oneclasslist.DataValueField="class1_name";
行 161: oneclasslist.DataBind();
行 162: oneclasslist.Items.FindByValue(Convert.ToString(DataBinder.Eval(e.Item.DataItem,"class1_name"))).Selected=true;
行 163: }
行 164: }
http://singlepine.cnblogs.com/articles/266538.html
改成如下
private void DataGridClass2_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType==ListItemType.EditItem)//改动这里
{
SqlConnection Conn = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]);
string sqlstring1 = "SELECT * FROM jq_class1 order by id desc";
SqlDataAdapter Comm = new SqlDataAdapter(sqlstring1, Conn);
DataSet dsone = new DataSet();
Comm.Fill(dsone, "jq_class1");
dvone = dsone.Tables["jq_class1"].DefaultView;
DropDownList oneclasslist=(DropDownList)e.Item.FindControl("onename");
oneclasslist.DataSource=dvone;
oneclasslist.DataTextField="class1_name";
oneclasslist.DataValueField="class1_name";
oneclasslist.DataBind();
oneclasslist.Items.FindByValue(Convert.ToString(DataBinder.Eval(e.Item.DataItem,"class1_name"))).Selected=true;
}
}
我把报错内容复制下来:
“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误:
行 160:oneclasslist.DataValueField="class1_name";
行 161:oneclasslist.DataBind();
行 162:oneclasslist.Items.FindByValue(Convert.ToString(DataBinder.Eval(e.Item.DataItem,"class1_name"))).Selected=true;
行 163:}
行 164:}
oneclasslist.Items.FindByValue(Convert.ToString(DataBinder.Eval(e.Item.DataItem,"class1_name"))).Selected=true;
数据库里面class1_name字段是Nvarchar类型,长度:30