DataGrid控件是这样写的(部分内容):<Columns>
<asp:TemplateColumn HeaderText="复选框">
<HeaderStyle Width="15%" HorizontalAlign="Left"></HeaderStyle>
<HeaderTemplate>
<asp:CheckBox ID="cbAll" OnCheckedChanged="SelectAll" AutoPostBack="True" Runat="server"></asp:CheckBox>全选
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="cbID" Runat="server"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn Visible="False" DataField="PKID"></asp:BoundColumn>
</Columns>cs文件是这样写的:
foreach(DataGridItem item in this.dataGrid.Items)
{
  DataRowView drv = (DataRowView)item.DataItem;
}drv为什么老是空的?报错提示:"将对象引用设置到对象的实例"

解决方案 »

  1.   

    立马取都取不到,在ItemDataBound事件中正常,
      

  2.   

    你要实现什么功能?
     CheckBox valCheck = item.Cells[0].Controls[1] as CheckBox;
      

  3.   

    http://dotnet.aspx.cc/ShowDetail.aspx?id=FF130C7F-3650-4DA6-8943-8AA4AF3E3459
      

  4.   

    net_lover(【孟子E章】) 整个代码在下面这个文件夹下,帮我看看,究竟是什么原因?http://gld.3322.org:8000/zhips2/projects.rar
      

  5.   

    这个时候不能使用DataItem<%@ Page Language="C#" AutoEventWireup="True" %><%@ Import Namespace="System.Data" %>
    <html><script language="C#" runat="server">
        
      string SortExpression;  ICollection CreateDataSource( )
      {
        DataTable dt = new DataTable();
        DataRow dr;
        Random Rand_Num = new Random();    dt.Columns.Add(new DataColumn("pkid", typeof(Int32)));
        dt.Columns.Add(new DataColumn("Title", typeof(string)));
        dt.Columns.Add(new DataColumn("CurrencyValue", typeof(double)));    for (int i = 0; i < 15; i++)
        {
          dr = dt.NewRow();      dr[0] = i;
          dr[1] = "Item " + i.ToString();
          dr[2] = 1.23 * Rand_Num.Next(1, 15);      dt.Rows.Add(dr);
        }    DataView dv = new DataView(dt);
        dv.Sort = SortExpression;
        return dv;
      }  void Page_Load( Object sender, EventArgs e )
      {    if (!IsPostBack)
        {      if (SortExpression == "")
            SortExpression = "IntegerValue";
          ItemsGrid.DataSource = CreateDataSource();
          ItemsGrid.DataBind();
        }  }  void Sort_Grid( Object sender, DataGridSortCommandEventArgs e )
      {
        SortExpression = e.SortExpression.ToString();
        ItemsGrid.DataSource = CreateDataSource();
        ItemsGrid.DataBind();
      }  protected void Button1_Click( object sender, EventArgs e )
      {
        foreach (DataGridItem item in this.ItemsGrid.Items)
        {
          string pik = item.Cells[0].Text;
          this.Response.Write("<script>alert('" + pik + "');</" + "script>");
        }
      }
    </script><body>
      <form id="Form1" runat="server">
        <asp:DataGrid ID="ItemsGrid" runat="server" BorderColor="black" BorderWidth="1" CellPadding="3"
          AllowSorting="true" OnSortCommand="Sort_Grid" AutoGenerateColumns="false">
          <Columns>
            <asp:BoundColumn Visible="False" DataField="pkid">
              <HeaderStyle Width="0%"></HeaderStyle>
            </asp:BoundColumn>
            <asp:BoundColumn DataField="Title" ReadOnly="True" HeaderText="工序">
              <HeaderStyle Width="15%"></HeaderStyle>
            </asp:BoundColumn>
            <asp:TemplateColumn HeaderText="指标">
              <HeaderStyle Width="10%"></HeaderStyle>
              <ItemTemplate>
                <%# DataBinder.Eval(Container.DataItem,"CurrencyValue")%>
              </ItemTemplate>
            </asp:TemplateColumn>
          </Columns>
        </asp:DataGrid>
        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
      </form>
    </body>
    </html>
      

  6.   

    <%@ Page Language="C#" AutoEventWireup="True" %>
    <%@ Import Namespace="System.Data" %>
    <html>
    <script language="C#" runat="server">    
      ICollection CreateDataSource( )
      {
        DataTable dt = new DataTable();
        DataRow dr;
        Random Rand_Num = new Random();    dt.Columns.Add(new DataColumn("pkid", typeof(Int32)));
        dt.Columns.Add(new DataColumn("Title", typeof(string)));
        dt.Columns.Add(new DataColumn("CurrencyValue", typeof(double)));    for (int i = 0; i < 6; i++)
        {
          dr = dt.NewRow();      dr[0] = i;
          dr[1] = "测试数据" + i.ToString();
          dr[2] = 1.23 * Rand_Num.Next(1, 15);      dt.Rows.Add(dr);
        }    DataView dv = new DataView(dt);
        return dv;
      }  void Page_Load( Object sender, EventArgs e )
      {
        if (!IsPostBack)
        {
          ItemsGrid.DataSource = CreateDataSource();
          ItemsGrid.DataBind();
        }
      }  protected void Button1_Click( object sender, EventArgs e )
      {
        foreach (DataGridItem item in this.ItemsGrid.Items)
        {
          if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
          {  
            this.Response.Write("<li>" + item.Cells[0].Text + " | " + item.Cells[1].Text);
          }      
        }
      }
    </script><body>
      <form id="Form1" runat="server">
        <asp:DataGrid ID="ItemsGrid" runat="server" BorderColor="black" BorderWidth="1" CellPadding="3"
         AutoGenerateColumns="false" EnableViewState="true">
          <Columns>
            <asp:BoundColumn Visible="False" DataField="pkid">
              <HeaderStyle Width="0%"></HeaderStyle>
            </asp:BoundColumn>
            <asp:BoundColumn DataField="Title" ReadOnly="True" HeaderText="工序">
              <HeaderStyle Width="15%"></HeaderStyle>
            </asp:BoundColumn>
            <asp:TemplateColumn HeaderText="指标">
              <HeaderStyle Width="10%"></HeaderStyle>
              <ItemTemplate>
                <%# DataBinder.Eval(Container.DataItem,"CurrencyValue")%>
              </ItemTemplate>
            </asp:TemplateColumn>
          </Columns>
        </asp:DataGrid>
        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="保存" />
      </form>
    </body>
    </html>
      

  7.   

    DataRowView drv = (DataRowView)item.DataItem;
    if( drv != null )
    {
      处理
    }
      

  8.   

    为什么DataGridItem.DataItem不能转换成DataRowView????
      

  9.   

    protected void Button1_Click( object sender, EventArgs e )
      {
        foreach (DataGridItem item in this.ItemsGrid.Items)
        {
          if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
          {  
            this.Response.Write("<li>" + item.Cells[0].Text + " | " + item.Cells[1].Text + "|" + item.Cells[2].Text + "这一列的值取不到");
          }      
        }
      }