这个代码(或项目)如何工作?(可编辑的ASP Gridview)

时间:2011-12-01 13:01:42

标签: c# asp.net c#-4.0 gridview

我是ASP.NET新手,我在asp.net中使用C#编辑了gridview,我在codeproject中找到了这个可编辑的gridview(DatabaseProject),但我没有意识到 它的工作特别是这部分代码:`

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
     DataRowView drv = e.Row.DataItem as DataRowView;
       if (e.Row.RowType == DataControlRowType.DataRow)
      {
          if ((e.Row.RowState & DataControlRowState.Edit) > 0)
          {
              DropDownList dp= (DropDownList )e.Row .FindControl ("DropDownList1");
              DataTable dt = load_department();
              for (int i = 0; i < dt.Rows.Count; i++)
           {
               ListItem lt = new ListItem();
               lt.Text = dt.Rows[i][0].ToString();
               dp.Items.Add(lt);
           }
              dp.SelectedValue = drv[3].ToString();
              RadioButtonList rbtnl = (RadioButtonList)e.Row.FindControl("RadioButtonList1");
              rbtnl.SelectedValue = drv[5].ToString();
              CheckBoxList chkb = (CheckBoxList)e.Row.FindControl("CheckBoxList2");
              chkb.SelectedValue = drv[6].ToString();    
          }              
       }
   }

` 为什么她/他这样做?

2 个答案:

答案 0 :(得分:4)

将网格绑定到数据源(例如,数据表)时会触发RowDataBound事件。

对于数据表中的每一行,此代码将运行,并将根据该行中的值在网格视图的每一列中放置一个值。

FindControl用于在网格视图的该行上找到具有特定名称的控件 - 请记住,它将重复多次以获得与您一样多的行。

找到控件后,将设置该值。

您正在为数据源中的每一行数据设置网格视图的每一行。

请查看http://msdn.microsoft.com/en-us/magazine/cc163933.aspx,了解此控件背后的意图。

答案 1 :(得分:1)

** RowDataBound当数据行绑定到GridView控件中的数据时发生。

** DataControlRowState指定eg.Edit,Insert,Selected等数据控件中行的状态

** RowState 获取与DataRowCollection关系的行的当前状态。

现在,if condition填充了Dropdownbox(DropDownList1),RadioButton和Checkebox正在设置他们选择的值。