.NET数据绑定控件使用记录(GridView,DataList,Reapter...)

一、GridView 控件

1、为当前源数据的行添加序号,使用<%# Container.DataItemIndex %>

<asp:GridView ID="GridView1" runat="server">
        <Columns>
        <asp:TemplateField HeaderText="序号">
        <ItemTemplate>
         <%# Container.DataItemIndex %>
        </ItemTemplate>
        </asp:TemplateField>
        </Columns>
 </asp:GridView>

 2、RowCommand事件

//获取当前行

GridViewRow gvr = (GridViewRow)((Control)e.CommandSource).Parent.Parent;

//获取当前行中的某一列中的TextBox控件

TextBox txtJobsName = (TextBox)gvr.Cells[2].FindControl("txtJobsName");

第二种方法:页面没有绑定CommandArgument 

int index=Convert.ToInt32(e.CommandArgument);

GridViewRow row =GridView1.Rows[index]; 

---------------------------------------------------------------------------------------------------------------------- 

第一种方式,取得点击的行号,主键值,某行中指定列的值,如下: 

protected void gvProduct_RowCommand(object sender, GridViewCommandEventArgs e)

{

//获取当前点击前的行号,说明:ImageButton因为我 放的按钮为ImageButton,用户可以根据放置的控件不同而不同。

int index = ((GridViewRow)((ImageButton)(e.CommandSource)).Parent.Parent).RowIndex;

//获取当前选点击行的主键值

     string key = this.gvProduct.DataKeys[index].Value.ToString();

        //获取当前点击行,某列的值   

 string id = this.gvProduct.Rows[index].Cells[1].Text;

/*

补充一下,因为我在上面的前台代码中放了CommandArgument='<%# Eval("ProductID") %>',ProductID为数据库中的主键,所以得到主键值也可以如下:string strProductId = e.CommandArgument.ToString();  */

 

// 有了上面的操作,以下操作就方便了

  if (e.CommandName == "manage")

     {

    //.......

  }

}

 

第二种方式:

//在前台代码中,不要     CommandArgument='<%# Eval("ProductID") %>'  这个代码,即去掉这个,然后,下面操作:

protected void gvProduct_RowCommand(object sender, GridViewCommandEventArgs e)

    {

        if (e.CommandName == "manage")

        {

            int index = Convert.ToInt32(e.CommandArgument);

            string key = this.gvProduct.DataKeys[index].value.toString();

            Response.Write(key);

        }

    } 

3、RowDataBound事件

//行数据绑定

 protected void gvProduct_RowDataBound(object sender, GridViewRowEventArgs e)

{

        if (e.Row.RowType == DataControlRowType.DataRow)

        {

            ImageButton imgBtn = new ImageButton ();

            imgBtn = (ImageButton )e.Row.Cells[6].FindControl("imgBtnManage");//自己清楚,此ImageButton模板列,你放在GridView中的第几列。

            imgBtn .CommandArgument = e.Row.RowIndex.ToString();

        }

}

 二、DataList控件

对于DataList,这么的写法

  protected void DL_student_ItemDataBound(object sender, DataListItemEventArgs e)

    {

      //if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.Alternatingitem) 

     if (e.Item.ItemType != ListItemType.Header && e.Item.ItemType != ListItemType.Footer)

       {

          Image img = (Image)e.Item.FindControl("Image1");

}

}

 三、Reapter控件

对于Repeater 控件。

  protected void RP_ErrorClock_ItemDataBound(object sender, DataListItemEventArgs e)

    {

      if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.Alternatingitem){

          Image img = (Image)e.Item.FindControl("Image1");

       }

}

1.如果绑定的数据源是DataTable,可以通过DataRowView dv = e.Item.DataItem as DataRowView; 获取到行数据

2.如果绑定的数据源是List数据模型(如: List< WfProcessInfoMOD >),可以通过WfProcessInfoMOD model = e.Item.DataItem as WfProcessInfoMOD;获取行数据模型

3.绑定当前源数据的行序号,与GridView类似, <%# Container.ItemIndex %>,一般是用Container先找数据集,再获取其属性

<asp:Repeater ID="Repeater1" runat="server">
            <HeaderTemplate>
                <table>                    
            </HeaderTemplate>
            <ItemTemplate>
                <tr><td> <%# Container.ItemIndex %></td>
                       <td> <%# Eval("name") %></td>
                </tr>               
            </ItemTemplate>
            <FooterTemplate>
                </table>
            </FooterTemplate>
        </asp:Repeater>

 

posted on 2012-11-19 22:29  二狗你变了  阅读(324)  评论(0)    收藏  举报

导航