asp.net给Reaper和GridView添加序号

repeater添加序号列的方法 

1、<itemtemplate> 
<tr><td> 
<%# Container.ItemIndex + 1%> 
</td></tr> 
</itemtemplate> 

2、<itemtemplate> 
<tr><td> 
<%# this.rpResult.Items.Count + 1%> 
</td></tr> 
</itemtemplate> 

3、在<form></form>中添加<Label ID="dd" ></Label> 
<body nload="show()"> 
<Script. Language="JScript"> 
function show() 
{ 
var bj = document.all.tags("LABEL"); 
for (i=0;i<obj.length;i++) 
{ 
document.all["dd"][i].innerHTML=i+1; 
} 
} 
</script> 

4、后台实现方法 
在.aspx里添加<asp:Label id="Label1" Runat="server"></asp:Label> 
在.cs里添加 
** void InitializeComponent() 
{ 
this.Repeater1.ItemDataBound += new System.Web.UI.WebControls.RepeaterItemEventHandler(this.Repeater1_ItemDataBound); 
this.Load += new System.EventHandler(this.Page_Load); 
} 
** void Repeater1_ItemDataBound(object source, System.Web.UI.WebControls.RepeaterItemEventArgs e) 
{ 
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
{ 
((Label)e.Item.FindControl("Label1")).Text = Convert.ToString(e.Item.ItemIndex + 1); 
} 
} 
5.根据条件添加html 
<%#Container.ItemIndex == 8 ? "<br><a href = 'http://www.ginchan.com.tw/' target='_blank'><img style='338px;heigh:70px' src='/ImportAD/ADmid.gif'> </a>" : ""%>

ASP.NET repeater添加序号列的方法

1.第一种方式

直接在Aspx页面GridView模板列中.这种的缺点是到第二页分页时又重新开始了.
<asp:TemplateField HeaderText="序号" InsertVisible="False">                       
    <ItemTemplate>               
        <%#Container.DataItemIndex+1%>            
    </ItemTemplate>             
</asp:TemplateField>

2.第二种方式

分页时进行了计算,这样会累计向下加
<asp:TemplateField HeaderText="序号" InsertVisible="False">
           <ItemStyle HorizontalAlign="Center" />
           <HeaderStyle HorizontalAlign="Center"/>
            <ItemTemplate>
                   <asp:Label ID="Label2" runat="server" Text='<%# this.GridView1.PageIndex * this.GridView1.PageSize + this.GridView1.Rows.Count + 1%>' />
           </ItemTemplate>
</asp:TemplateField>

3.第三种方式

放在cs代码中,和第二种相似
<asp:BoundField HeaderText="序号" ></asp:BoundField>
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)         
{             
    if (e.Row.RowIndex != -1)             
    {                 
        int indexID = this.GridView1.PageIndex * this.myGridView.PageSize + e.Row.RowIndex + 1;                 
        e.Row.Cells[0].Text = indexID.ToString();             
    }         
}

4.不用添加在后台查找

int rowIndex = ((GridViewRow)((Button)e.CommandSource).NamingContainer).RowIndex;
TextBox tb = (TextBox)GridView1.Rows[i].FindControl("TextBox");
e.CommandSource传的是按下去的Button,不过由于传回的是Object,就得自行转化Button,但我们想知道的是RowIndex,而Button是包含在GridViewRow內,所以通过NamingContainer传回目前的GridViewRow,得到是Control,所以需在转成GridViewRow后才能有RowIndex 属性。
原理是:将当前行索引和Button的commandargument绑定,用的时候只要取出当前行的索引即可,gridview的rowcommand事件和datalist的itemcommand事件相似

在repeater中查找当前的行方法如下:

    protected void repQuestions_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            Button butEdit = (Button)(e.Item.FindControl("butEdit"));
            Button butDelete = (Button)(e.Item.FindControl("butDelete"));
            Label labQuetionType = (Label)(e.Item.FindControl("labQeustionType"));
            TextBox texSequence = (TextBox)(e.Item.FindControl("texSequence"));
            int cursequence = Convert.ToInt32(butEdit.CommandArgument);
            int id = Convert.ToInt32(butDelete.CommandArgument);
            QuestionType questionType = questionnaireService.GetQuestionType(labQuetionType.Text);
            if(e.CommandName == "Edit")
            {
                EditCurrentQuestion(id, cursequence);
                hidQuestionSequence.Value = texSequence.Text.Trim();
            }
            else if(e.CommandName == "Delete")
            {
                int index = questionnaire.Questions.FindIndex(a => a.Sequence == cursequence);
                this.questionnaire.Questions.RemoveAt(index);
            }
            BindQuestions();
        }
    }

 这里涉及到在gridview的某一个单元格里查找值的问题,这个方法很多了,但是有一种很特别,如果在前台绑定用TemplateField,但是里面却用Eval,这样应该怎么查找呢,答案是DataBoundLiteralControl,这个空间就是这个单元格类型控件,他的Text属性就是我们要查找的值,前台绑定代码和后台的查找方法如下:

前台绑定

<asp:TemplateField HeaderText="回复数">
    <ItemTemplate>
    <%#Eval("ReplyCount")%>
    </ItemTemplate>
</asp:TemplateField>

后台获取

protected void gvStatistic_RowCommand(object sender, GridViewCommandEventArgs e)
{
    int id = Convert.ToInt32(((LinkButton)e.CommandSource).CommandArgument);
    int rowIndex = ((GridViewRow)((LinkButton)e.CommandSource).NamingContainer).RowIndex;
    if(e.CommandName == "check")
    {
        string replyCount = ((DataBoundLiteralControl)(gvStatistic.Rows[rowIndex].Cells[2].Controls[0])).Text.Trim();
        if(!string.IsNullOrWhiteSpace(replyCount) && replyCount == "0")
        {
            AlertMessage.Show(this, "该问卷没有回复!");
        }
        else
        {
            Server.Transfer("StatisticsDetails.aspx?ID=" + id.ToString());
        }
    }

作者:Tyler Ning
出处:http://www.cnblogs.com/tylerdonet/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,请微信联系冬天里的一把火

原文地址:https://www.cnblogs.com/tylerdonet/p/2994433.html