我想实现的效果是这样的:
repeater中有一项"未审核"的超链接,当审核成功以后,我的这个超链接变成了我images文件夹里的一个对号图片,我怎么在repeater中完成这个替换过程,请高手知道
我为什么在repepeater中嵌套控件,比如说Linkbutton在后台找不到它的定义,所以不知道怎么给它写事件?SOS
repeater中有一项"未审核"的超链接,当审核成功以后,我的这个超链接变成了我images文件夹里的一个对号图片,我怎么在repeater中完成这个替换过程,请高手知道
我为什么在repepeater中嵌套控件,比如说Linkbutton在后台找不到它的定义,所以不知道怎么给它写事件?SOS
public string showImg(string inValue)
{
if(inValue == yourFlag)
{
return "<img src=>";
}
else
{
return "<a herf='*.aspx'>value</a>";
}
}
你个可以用两个控件:一个linkButton,一个imagebutton;
未审核时隐藏imagebutton,显示另一个;
审核后隐藏linkbutton,显示另一个.
为什么在repeater中嵌套的控件在后台不能找到定义呢?我用FindControl找到repeater中的控件,但是在调试时候说“未将对象引用到实例”
我的例子是这样的:rpt就是repeater的id
LinkButton lbtn=new LinkButton();
lbtn=(LinkButton)this.rpt.ItemCommand("jy");
lbtn.Text="aa";高手请指点一下怎么才能找到repeater中的空间呢?
审核完显示image,隐藏link。
可以在CS文件里控制,也可以直接输出html。
(ImageButton).................................. = true;
<asp:Repeater id="Repeater1" runat="server">
<ItemTemplate>
<div>
<asp:LinkButton ID='linkBtn' Runat="server">哈哈</asp:LinkButton>
<asp:Label ID='num' Runat="server"></asp:Label></div>
</ItemTemplate>
</asp:Repeater>
-------------------------------------------------------------------------------------------------------------------------后台-------------------------------------------
private void Repeater1_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
{
Label l=(Label)e.Item.FindControl("num");
if(l!=null)
{
l.Text=i.ToString();
}
if(i%3==0)
{
LinkButton lb=(LinkButton)e.Item.FindControl("linkBtn");
if(lb!=null)
{
HtmlImage image=new HtmlImage();
image.Src="http://www.csdn.net/CSDN_Common_Header_Footer/Images/BiaoShi.gif";
e.Item.Controls.Remove(lb);
e.Item.Controls.AddAt(0,image);
}
}
i++;
}
____________________________________________________________________________________
怎么找到呢 用FindControl吗??
我怎么知道呢??
{
Litera l=(Litera)e.Item.FindControl("Literal1");
if(l!=null)
{
//Response.Write("哈哈,找到了!");
}
}
但是为什么没有DataSource这项??我应该怎么绑定Literal1数据呢??
我按照happyfamily的想法去做了,但是我怎么才能找到前台repeater中那个id为Literal1的Literal呢?
我怎么才能把我标记表给这个Literal绑定呢?
我的标记表如下
bsf(标识符)
bj(标记)
我要通过这个bj列来判断是否给添加超链接还是添加图片,但是我不能绑定标记这一列啊,高手救救我吧,我没有分再发一个帖子了,拯救!!拯救!!!
private void Repeater1_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
{
控件 控件名=e.Item.FindControl("页面的控件名"); 控件名.value =...
}
--为我喝彩,为我加分--
case Isnull(intOwnerid,1) when 1 then ''订阅回帖'' when '+convert(varchar(10),@intUserID)+' then ''退订回帖'' else ''订阅回帖'' end as ImgText,
case Isnull(intOwnerid,1) when 1 then ''../Resource/IMAGE/ICO_BBSMAIL.gif'' when '+convert(varchar(10),@intUserID)+' then ''../Resource/IMAGE/ICO_BBSMAIL2.gif'' else ''../Resource/IMAGE/ICO_BBSMAIL.gif'' end as Imgsrc,
,*
From data_bbsItems 前台 <asp:TemplateColumn HeaderText="回帖跟踪">
<HeaderStyle Wrap="False" HorizontalAlign="Center" Width="100px" VerticalAlign="Middle"></HeaderStyle>
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle"></ItemStyle>
<ItemTemplate>
<asp:HyperLink id="Hyperlink2" runat="server"></asp:HyperLink><IMG src='<%# DataBinder.Eval(Container.DataItem, "Imgsrc") %>' align=absMiddle>
<A href='frmForumAddPaste.aspx?intRepID=0&intItemID=<%# DataBinder.Eval(Container.DataItem, "intItemsId") %>&strStatus=subscribe'>
<%# DataBinder.Eval(Container.DataItem, "ImgText") %>
</A>
</ItemTemplate>
</asp:TemplateColumn>
<HEADERTEMPLATE>
</HEADERTEMPLATE>
<FOOTERTEMPLATE>
</FOOTERTEMPLATE>
<ITEMTEMPLATE>
<TABLE width="300" border="1" cellspacing="1" cellpadding="1">
<TR>
<TD width="100">
<ASP:LITERAL id="Literal2" runat="server" text='<%#DataBinder.Eval(Container.DataItem,"name","{0:D}")%>'>
</ASP:LITERAL>
</TD>
<TD width="200">
<ASP:PANEL id="Panel1" runat="server" visible='<%#DataBinder.Eval(Container.DataItem,"isOk","{0}")=="1"?false:true%>'>未通过审核</ASP:PANEL>
<ASP:PANEL id="Panel2" runat="server" visible='<%#DataBinder.Eval(Container.DataItem,"isOk","{0}")=="1"?true:false%>'>
<ASP:IMAGE runat="server" enableviewstate="False" imageurl='<%#DataBinder.Eval(Container.DataItem,"face")%>' id='Image5'/>
</ASP:PANEL>
</TD>
</TR>
</TABLE>
</ITEMTEMPLATE>
</ASP:REPEATER>private void Page_Load(object sender, System.EventArgs e)
{
DataTable dt=new DataTable();
DataRow dRow;
dt.Columns.Add("isOk");
dt.Columns.Add("name");
dt.Columns.Add("face");
for(int i=0;i<4;i++)
{
dRow=dt.NewRow();
if(i%2==0)
{
dRow["isOk"]="1";
}
else
{
dRow["isOk"]="0";
}
dRow["face"]="001.gif";//////////你的图片
dRow["name"]="name"+i.ToString();
dt.Rows.Add(dRow);
}
Repeater1.DataSource=dt;
Repeater1.DataBind();
}
<%#DataBinder.Eval(Container.DataItem,"isOk","{0}")=="1"?false:true%>isOk=1审核通过
感激 如果可以我就请你吃饭
我的repeater已经绑定数据源了
我怎么才能绑定repeater中的LITERAL或者是PANEL呢?
为什么我这样写不可以给LITERAL指定DataSource呢?
Literal jy=new Literal();
jy=(Literal)rpt.FindControl("jy");
jy???不能指定数据源
jy.DataBind();
怎么回事??
Literal jy=new Literal();
jy=(Literal)rpt.FindControl("jy");
jy???不能指定数据源
jy.DataBind();
怎么回事??没看到你的代码,我无法回答。请问如果我要是绑定了数据库中的一个表中的一列,我应该怎么办呢?
我的repeater已经绑定数据源了
我怎么才能绑定repeater中的LITERAL或者是PANEL呢?等。
我在repeater中绑定了一个数据表中的一列,在我repeater的td中建了个Literal控件,这个控件要绑定我标记中的一列,来判断显示超链接还是图片。
我有一个DataSet(),我开始填充了一个表,是为repeater提供数据源的,但是我这个Literal怎么才能给它提供数据源呢??我怎么写才对呢??
<ASP:PANEL id="Panel2" runat="server" visible='<%#DataBinder.Eval(Container.DataItem,"isOk","{0}")=="1"?true:false%>'>
<ASP:IMAGE runat="server" enableviewstate="False" imageurl='<%#DataBinder.Eval(Container.DataItem,"face")%>' id='Image5'/>
</ASP:PANEL>比如:
审核数据字段为Checked,值为1时审核通过,值为0时审核未通过或还没审核数据库里存图片的路径字段为Image把上边的isOk换成Checked,face换成Image就行了<ASP:LITERAL id="Literal2" runat="server" text='<%#DataBinder.Eval(Container.DataItem,"name","{0:D}")%>'>
</ASP:LITERAL>
这个不用<ASP:LITERAL>。(是笔误)
<%#DataBinder.Eval(Container.DataItem,"name","{0:D}")%>'其他字段正常绑定。如:<%#DataBinder.Eval(Container.DataItem,"name","{0:D}")%>
如果还不行,贴出你的代码。
string SqlCmd="select * from ZYJHYSJ order by jid desc ";
ConStr=ConfigurationSettings.AppSettings["ConStr"];
Conn=new SqlConnection(ConStr);
SqlDataAdapter da=new SqlDataAdapter(SqlCmd,Conn);
da.Fill(ds,"ZYJHYSJ");
rpt.DataSource=ds;
rpt.DataBind();
那同样我给id为"Literal2"的LITERAL指定数据源,数据源为我数据库中的一个表,我该怎么做呢?还有就是LITERAL是嵌套在我这个repeater中的。
rpt.DataBind();
绑定,谢谢啦
<ItemTemplate>
<table>
<TR>
<TD align="center">
<asp:HyperLink Runat=server NavigateUrl='<%#DataBinder.Eval(Container.DataItem,"PostUserID","{0}")%>' Text='<%#DataBinder.Eval(Container.DataItem,"PostUserName")%>' ID="Hyperlink2" Target=_blank/>
</TD>
<TD style="BACKGROUND-COLOR: #f5f5f5" vAlign="top" align="center">
<%#DataBinder.Eval(Container.DataItem,"childcnt")%>
</TD>
<TD align="center">
<asp:TextBox id="TextBox1" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"name")%>'/>
</TD>
</TR>
</table>
</ItemTemplate>
<HeaderTemplate>
</HeaderTemplate>
<FooterTemplate>
</FooterTemplate>
</asp:repeater>后台
string SqlCmd="select * from ZYJHYSJ order by jid desc ";
ConStr=ConfigurationSettings.AppSettings["ConStr"];
Conn=new SqlConnection(ConStr);
SqlDataAdapter da=new SqlDataAdapter(SqlCmd,Conn);
da.Fill(ds,"ZYJHYSJ");Repeater1.DataSource=dsBBS.Tables[0].DefaultView;
Repeater1.DataBind();"PostUserID","PostUserName","name","childcnt"都是数据库里对应的字段名
ConStr=ConfigurationSettings.AppSettings["ConStr"];
Conn=new SqlConnection(ConStr);
SqlDataAdapter da=new SqlDataAdapter(SqlCmd,Conn);
da.Fill(ds,"ZYJHYSJ");Repeater1.DataSource=ds.Tables[0].DefaultView;
Repeater1.DataBind();"PostUserID","PostUserName","name","childcnt"都是数据库里对应的字段名
ConStr=ConfigurationSettings.AppSettings["ConStr"];
Conn=new SqlConnection(ConStr);
SqlDataAdapter da=new SqlDataAdapter(SqlCmd,Conn);
da.Fill(ds,"ZYJHYSJ");Repeater1.DataSource=ds.Tables[0].DefaultView;
Repeater1.DataBind();
这个是仅仅是我给repeater的数据填充的数据绑定,因为这个repeater要显示ZYJHYSJ表数据的,而我的那个标记表是另一个数据库中的表,表名称SH(审核)其中有
bsf(标识符key)
bj(标记)
就是开始是“尚未审核”的超链接,当我链接到审核页了,通过审核了我对应的这个标识符就要做个标记,当然就是bj这个字段要打上个标记,说明我已经通过审核了,返回前台那个页面
那个“尚未审核”超链接就变成了一个红色的对勾,不能有链接了。
因为repeater显示要的是ZYJHYSJ表,而审核那个标记页是个独立的表,所以我不知道这个SH表的数据怎么样填充,并进行绑定。是我开始没有叙述清楚,对不起哈~
比如:
ZYJHYSJ表 与 标记表tempselect ZYJHYSJ.PostUserID,ZYJHYSJ.PostUserName,ZYJHYSJ.ImgePath,temp.tag from ZYJHYSJ,temp where ZYJHYSJ.PostUserID=temp.IdPostUserID,PostUserName 。 对应绑定
实在不行可以用一种笨办法:
用模板列,其中放一个LINKBUTTON控件一个IMAGE控件,在repeater显示时用FindControl("")方法找到两个控件并按照你读取出来的审核与否确定LinkButton的Visible属性,而Image的Visible属性是!(LinkButton.Visible)
假设你的审核与否,是某个字段记录,比如0/1,那么,你可以在SQL语句中直接绑定图标.比如:
select id,title,decode(type,0,'<a href=xxx.aspx>待审核</a>','<img src=xxx.gif alt=已审核>') from table
如此,直接绑定即可显示信息.
<ASP:REPEATER id="Repeater1" runat="server">
<HEADERTEMPLATE>
</HEADERTEMPLATE>
<FOOTERTEMPLATE>
</FOOTERTEMPLATE>
<ITEMTEMPLATE>
<TABLE width="300" cellspacing="1" cellpadding="0" bgcolor="#000000">
<TR bgcolor="#ffffff" align="center" height="40">
<TD width="100">
<%#DataBinder.Eval(Container.DataItem,"PostUserName","{0:D}")%>
</TD>
<TD width="200">
<asp:HyperLink id="HyperLink1" runat="server" navigateurl='<%#DataBinder.Eval(Container.DataItem,"bsf","View.aspx?bsf={0}")%>' visible='<%#DataBinder.Eval(Container.DataItem,"bj","{0}")=="1"?false:true%>'>未通过审核</asp:HyperLink>
<asp:Image id='Image1' runat="server" enableviewstate="False" imageurl='001.gif' visible='<%#DataBinder.Eval(Container.DataItem,"bj","{0}")=="1"?true:false%>'/>
</TD>
</TR>
</TABLE>
</ITEMTEMPLATE>
</ASP:REPEATER>private void Page_Load(object sender, System.EventArgs e)
{
DataTable dt=new DataTable();
DataRow dRow;
dt.Columns.Add("bj");
dt.Columns.Add("PostUserName");
dt.Columns.Add("bsf");
for(int i=0;i<4;i++)
{
dRow=dt.NewRow();
if(i%2==0)
{
dRow["bj"]="1";
}
else
{
dRow["bj"]="0";
}
dRow["PostUserName"]="name"+i.ToString();
dRow["bsf"]=i.ToString();
dt.Rows.Add(dRow);
}
Repeater1.DataSource=dt;
Repeater1.DataBind();
}
如果联合查询了 ,把两个表的结果都放到了DataSet()里面,我的repeater绑定了ds,是否那个HyperLink空间可以找到ds中的一列呢?因为我的这个HyperLink没有直接指定数据源,而是间接的通过绑定repeater绑定的,不知道是否可以?
我是要建立这样的一个结构.
1.在审核前必须要通过校验,初始状态 校验项为 待校验(超链接) 审核项为 尚未激活审核
2.当有某项已经校验完成 状态 校验项 已校验(对勾图片)审核项为 待审核
3.全部完成 状态 校验项 已校验(对勾图片)审核项为 已审核(对勾图片)
表设计(大家帮忙看看结构是否合理)
主表(ZYJHYSJ):我的项列表 里面列出了所有的项 key为bsf(标识符) 内容
校验表(JY):用来标识我校验的状态 项 jyid(自动编号)bsf(对应主表的bsf)zt(状态)
审核表(SH):标识审核状态 项 shid(自动编号)bsf(对应主表的bsf)zt(状态)
对应表(DY):存放图片地址和超链接 项 dyid(自动编号)zt(对应JY,SH的zt)nr(内容)有 待校验、已校验(对勾图片)地址、尚未激活审核、待审核、已审核(对勾图片)地址
大家看看这个表有问题吗设计的,谢谢大家关注~~
就是这个样子:
前端 <%=HtmlString%>后端:
string HtmlString; //成员变量...
// 某个函数里
HtmlString = "<a href=\"...\"">...</a>"
有图的话,把<img src=...>加进去就可以了啊。
这个帖子上边的第五个是详细的介绍,请看一下
我觉得q_po_o还是可行的,只不过还要细化。
{
if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
{
l=(CheckBox)e.Item.FindControl("cb");
if(l!=null)
l.Checked=true;
CheckBox c=(CheckBox)e.Item.FindControl("cb1");
if(c!=null)
{
c.Checked=true;
}
}
}
这个已经测试通过了
是不是我又个repeater假如叫rpt,
那么我就可以在后台声明一个
private void rpt_ItemDataBound(object sender,System.Web.UI.WebControls.RepeaterItemEventArgs e)
{}
的函数,那么当执行这个repeater的时候就可以自动执行了吗??
不明白还是!!
校验表(JY):用来标识我校验的状态 项 jyid(自动编号)bsf(对应主表的bsf)zt(状态)
审核表(SH):标识审核状态 项 shid(自动编号)bsf(对应主表的bsf)zt(状态)
对应表(DY):存放图片地址和超链接 项 dyid(自动编号)zt(对应JY,SH的zt)nr(内容)有 待校验、已校验(对勾图片)地址、尚未激活审核、待审核、已审核(对勾图片)地址这些表应该有唯一关联呐!把上边的数据想办法联合查询到一个dataset里,然后绑定repeater,
再跟据我的代码思路细化你的代码
我准备把
1.未校验
2.对勾图片
3.尚未激活审核
4.待审核
5.对勾图片
6.审核不成功
然后我在你写的那个
<asp:HyperLink id="HyperLink1" runat="server" navigateurl='<%#DataBinder.Eval(Container.DataItem,"bsf","updata.aspx?bsf={0}")%>' visible='<%#DataBinder.Eval(Container.DataItem,"bj","{0}")=="1"?true:false%>'>未通过校验</asp:HyperLink>
就这样类似
<asp:Image id='Image1' runat="server" enableviewstate="False" imageurl='001.gif' visible='<%#DataBinder.Eval(Container.DataItem,"bj","{0}")=="2"?true:false%>'/>
我的用SqlDataAdapter做的 所有我帮定的时候用的是<%#DataBinder.Eval(Container.DataItem,"bsf")%>可是刚才调试出了这样的问题NavigateUrl=updata.aspx?bsf=<%#DataBinder.Eval(Container.DataItem,"bsf")%>
这句总是出错如果我这样
NavigateUrl='updata.aspx?bsf=<%#DataBinder.Eval(Container.DataItem,"bsf")%>'
那个标识符就不是库里的标识符例如:200011132而是<%#DataBinder.Eval(Container.DataItem,"bsf")%>
如果我这样
NavigateUrl=updata.aspx?bsf=<%#DataBinder.Eval(Container.DataItem,"bsf")%>
报错,格式不对
这样
NavigateUrl='updata.aspx?bsf='<%#DataBinder.Eval(Container.DataItem,"bsf")%>
也不对
请帮我看看怎么回事啊??
updata.aspx在里边
navigateurl='<%#DataBinder.Eval(Container.DataItem,"bsf","updata.aspx?bsf={0,c}")%>
绑定情况
string SqlCmd="select * from ZYJHYSJ order by jid desc ";
SqlDataAdapter da=new SqlDataAdapter(SqlCmd,Conn);
da=new System.Data.SqlClient.SqlDataAdapter(SqlCmd,Conn);
ds=new DataSet();
da.Fill(ds, "ZYJHYSJ");
rpt.DataSource=ds;
rpt.DataBind();
ToString()是什么?
jy是什么类型?
字符-》()=="1"?
数字-》()==1?