有一段程序,在未修改之前可以运行正常。本人想添加一个与之前有一样效果的GridView控件,于是对GridView5控件进行复制。修改了一下其中的一些小控件ID之后,对后台.cs相关代码也页进行了相同的复制,但是运行后报了题目中所示的的错误。
aspx页面的代码:
<asp:GridView ID="GridView6" runat="server" Width="100%" AutoGenerateColumns="False" BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" CellPadding="3">
<Columns>
<asp:TemplateField HeaderText="综合题">
<ItemTemplate>
<table id="Table7" cellspacing="1" cellpadding="1" width="100%" align="center" border="0">
<tr>
<td>
<asp:Label id="Label24" runat="server" Text='<%# Container.DataItemIndex+1 %>'>
</asp:Label>
<asp:Label id="Label25" runat="server" Text='<%# Eval("Title","、{0}") %>'>(报错的地方)
</asp:Label>
<asp:TextBox id="txtAnswer1" runat="server" Width="100%" TextMode="MultiLine"></asp:TextBox>
<asp:Label id="Label26" runat="server" Text='<%# Eval("ID") %>' Visible="False">
</asp:Label>
</td>
</tr>
</table>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>.cs代码:
SqlParameter[] Params6 = new SqlParameter[2];
Params6[0] = DB.MakeInParam("@PaperID", SqlDbType.Int, 4, paperID); //试卷编号
Params6[1] = DB.MakeInParam("@Type", SqlDbType.VarChar, 10, "综合题"); //题目类型
DataSet ds6 = DB.GetDataSet("Proc_PaperDetail", Params6);
GridView6.DataSource = ds6;
GridView6.DataBind();
DB.GetDataSet的代码:
public DataSet GetDataSet(string ProcName, SqlParameter[] Params)
{
Open();
SqlCommand Cmd = CreateCommand(ProcName, Params);
SqlDataAdapter adapter = new SqlDataAdapter(Cmd);
DataSet dataset = new DataSet();
adapter.Fill(dataset);
Close();
return dataset;
}这段代码是仿照复制添加GridView6前GridView5的代码进行修改的,运用到了存储过程(本人对这个不太懂),会不会是只复制添加了前面两段代码,对存储过程中sql语句没有成对添加?是不是 GridView6.DataSource = ds6那里导致出的错?
有个疑问就是有好几种题型和几个ds,代码都差不多,如何知道某个ds绑定了哪个数据表进行数据读取的操作呢?
找遍了所有代码,找不到ds跟数据库交互的sql语句。
求助!!!!
aspx页面的代码:
<asp:GridView ID="GridView6" runat="server" Width="100%" AutoGenerateColumns="False" BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" CellPadding="3">
<Columns>
<asp:TemplateField HeaderText="综合题">
<ItemTemplate>
<table id="Table7" cellspacing="1" cellpadding="1" width="100%" align="center" border="0">
<tr>
<td>
<asp:Label id="Label24" runat="server" Text='<%# Container.DataItemIndex+1 %>'>
</asp:Label>
<asp:Label id="Label25" runat="server" Text='<%# Eval("Title","、{0}") %>'>(报错的地方)
</asp:Label>
<asp:TextBox id="txtAnswer1" runat="server" Width="100%" TextMode="MultiLine"></asp:TextBox>
<asp:Label id="Label26" runat="server" Text='<%# Eval("ID") %>' Visible="False">
</asp:Label>
</td>
</tr>
</table>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>.cs代码:
SqlParameter[] Params6 = new SqlParameter[2];
Params6[0] = DB.MakeInParam("@PaperID", SqlDbType.Int, 4, paperID); //试卷编号
Params6[1] = DB.MakeInParam("@Type", SqlDbType.VarChar, 10, "综合题"); //题目类型
DataSet ds6 = DB.GetDataSet("Proc_PaperDetail", Params6);
GridView6.DataSource = ds6;
GridView6.DataBind();
DB.GetDataSet的代码:
public DataSet GetDataSet(string ProcName, SqlParameter[] Params)
{
Open();
SqlCommand Cmd = CreateCommand(ProcName, Params);
SqlDataAdapter adapter = new SqlDataAdapter(Cmd);
DataSet dataset = new DataSet();
adapter.Fill(dataset);
Close();
return dataset;
}这段代码是仿照复制添加GridView6前GridView5的代码进行修改的,运用到了存储过程(本人对这个不太懂),会不会是只复制添加了前面两段代码,对存储过程中sql语句没有成对添加?是不是 GridView6.DataSource = ds6那里导致出的错?
有个疑问就是有好几种题型和几个ds,代码都差不多,如何知道某个ds绑定了哪个数据表进行数据读取的操作呢?
找遍了所有代码,找不到ds跟数据库交互的sql语句。
求助!!!!
这个是GW绑定DS DataSource 等于的是ds几 绑定的就是哪个DS
DataSet dataset = new DataSet();
adapter.Fill(dataset);
这个是给DS赋值 这个函数返回类型就是dataset 调用这个函数就是给DS赋值了
红色部分我还真没看懂,什么意思》有一个"、"
既然代码差不多,写一个通用的函数就可以了啊,这个你可以在ds中添加一列,来表示添加的那个数据源表
Params6[1] = DB.MakeInParam("@Type", SqlDbType.VarChar, 10, "综合题");中的"综合题"改成了与程序复制来源处相同"问答题",aspx页面中的的'Title'不变,这样的话能够正常的显示出问答题来。问题是数据库中我的“综合题”的表是复制自“问答题”表,里面的字段属性也是一样的,为什么就会报错呢?麻烦大虾啦!!
DataSet ds5 = DB.GetDataSet("Proc_PaperDetailmr", Params5);
GridView5.DataSource = ds5;
GridView5.DataBind();string ceshi = "";
ceshi = ds5.Tables[0].Rows[0]["Title"].ToString();
断点调试之后ceshi=""的了为什么ds5能正常显示的GridView,得到的也是NULL值呢?
问答题综合题
[img=http://hi.baidu.com/solely00/album/item/3b93efd1a9ec8a1316c52e57f703918fa2ecc0fc.html#IMG=66c4fc067bf40ad10d3bbe54572c11dfabeccefcimg]
会不会是在其他地方涉及到每个ds和每个GridView进行数据的绑定
就这么结束了?
你忘记设置DataMember属性了,如果你的DataSource是DataTable,那么不需要设置DataMember属性,但是你现在是DataSet
另在我未作修改前,也是只写了GridView5.DataSource = ds5;能够正常运行的。
方便加个QQ吗,非常感谢您~!327578710
另外我只是给你一个建议,毕竟我现在主要搞WinForm的开发,WEB是我C#入门时搞的,时间长了,也许问题不在那里,但是多一个可能性也是好的。
Params6[0] = DB.MakeInParam("@PaperID", SqlDbType.Int, 4, paperID);
Params6[1] = DB.MakeInParam("@Type", SqlDbType.VarChar, 10, "综合题");
DataSet ds6 = DB.GetDataSet("Proc_PaperDetail", Params6);这里是调用了存储过程,先是找到一张表,该表是一张试卷中所有题目的汇总,字段有试卷编号、题目类型type和标题ID,然后根据题目类型type和标题ID来找到每种题型各自的表单,里面字段有ID、CourseID、Title、Answer等。
现在我搞不清楚的就是它是怎么实现“根据题目类型type和标题ID来找到每种题型各自的表单”的后台代码里面都找不到。
非常感谢你的耐心回答!!鞠躬~
private SqlCommand CreateCommand(string ProcName, SqlParameter[] Prams)
{
Open();
SqlCommand Cmd = new SqlCommand(ProcName, Connection);
Cmd.CommandType = CommandType.StoredProcedure;
if (Prams != null)
{
foreach (SqlParameter Parameter in Prams)
Cmd.Parameters.Add(Parameter);
}
return Cmd;
}
哎,身边有个擅长这个存储过程的高手就好了自学就是困难啊
现在就是这个存储过程找不到,它的SQL语句也不清楚,估计就是里面的SELECT语句缺少了综合题这张表
App_Code中定义的几个类的文件夹:AjaxClass(AjaxCommond.cs)、BusinessClass(ComprehensiveProblem.cs、Course.cs、Department.cs、FillBlankProblem.cs、JudgeProblem.cs、MultiProblem.cs、Papermr.cs、QuestionProblem.cs、Role.cs、Scores.cs、SingleProblem.cs、Usersmr.cs),找不到存储过程SQL的影子
所以问题出现在了存储过程的调用中,“DataSet ds6 = DB.GetDataSet("Proc_PaperDetail", Params6);”这时ds6是null值。需要再存储过程的SQL语句中添加综合题这张表单,但是现在找不到,是不是被封装了?
使用命令 sp_helptext proc_name(你的存储过程的名字,此时应该是Proc_PaperDetailmr),就可以查看到了~
大神您知道怎么修改已定义的存储过程吗?
其实Visual Studio也可以管理,但是功能没有这个强大。至于修改存储过程,其实只要执行ALTER语句即可,但是前提是你要会写SQL语句。不过用上述的工具就不需要那么麻烦,自动创建更改脚本,然后只要微调即可。