DataGrid中这样绑定的奇怪问题...
-)DataGrid代码
<asp:DataGrid id="dgmyproject" runat="server" Width="100%" AutoGenerateColumns="False" >
<AlternatingItemStyle CssClass="gridalteritem" BackColor="#CD9BFF"></AlternatingItemStyle>
<ItemStyle CssClass="griditem" BackColor="#EEEEEE"></ItemStyle>
<HeaderStyle CssClass="headcenter" BackColor="#C389EE"></HeaderStyle>
<Columns>
<asp:BoundColumn DataField="pkid" HeaderText="ID序号"></asp:BoundColumn>
<asp:BoundColumn DataField="clientname" ReadOnly="True" HeaderText="客户名称"></asp:BoundColumn>
<asp:BoundColumn DataField="qiantime" HeaderText="签定时间"></asp:BoundColumn>
<asp:BoundColumn DataField="servicepermonth" HeaderText="次/月"></asp:BoundColumn>
<asp:TemplateColumn HeaderText="初始化">
<ItemTemplate>
<a href='viewcs.aspx?khid=<%#DataBinder.Eval(Container.DataItem,"pkid")%>' title="查看初始化"><IMG src='../images/<%#DataBinder.Eval(Container.DataItem,"csimg")%>'border=0></a> <A onclick="javascript:window.open('addcshi.aspx?khid=<%#DataBinder.Eval(Container.DataItem,"pkid")%>',null, 'height=250, width=450')" href="#">
设置</A>
</ItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn DataField="nextday" ReadOnly="True" HeaderText="下一巡检日" DataFormatString={0:d}></asp:BoundColumn>
<asp:TemplateColumn HeaderText="当期月巡检">
<ItemTemplate>
<img src='../images/<%#GetprojectsByID(DataBinder.Eval(Container.DataItem,"pkid").ToString())%>'>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="月巡检设置">
<ItemTemplate>
<A onclick="javascript:window.open('setmonthsp.aspx?khid=<%#DataBinder.Eval(Container.DataItem,"pkid")%>',null, 'height=250, width=450')" href="#">
添加月巡检</A>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
二)后台方法
public String GetprojectsByID(string strmyID)
{
cn=new SqlConnection(ConfigurationSettings.AppSettings["DSN"]);
SqlCommand cm= new SqlCommand("getproject",cn);
cm.CommandType=CommandType.StoredProcedure;
SqlParameter paraID= new SqlParameter("@Newkhid",SqlDbType.Int,4);
paraID.Value=Convert.ToInt16(strmyID);
cm.Parameters.Add(paraID);
cn.Open();
mystring=(cm.ExecuteScalar()).ToString();
cn.Close();
return mystring;
}
三)错误提示
未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。
源错误:
行 41: <ItemTemplate>
行 42:
行 43: <img src='../images/<%#GetprojectsByID(DataBinder.Eval(Container.DataItem,"pkid").ToString())%>'>
行 44:
行 45: </ItemTemplate>
四)我将上面代码中
<img src='../images/<%#GetprojectsByID(DataBinder.Eval(Container.DataItem,"pkid").ToString())%>'>
改成为 <img src='../images/<%#GetprojectsByID(8.ToString())%>'> 即可正常显示.
提示:
8是取得的具体pkID,(pkid是肯定可以取到的,因为我将GetprojectsByID方法去掉,其pkid可正常显示)