【问题标题】:Need help figuring out a way to input data into an asp:DataGrid需要帮助找出将数据输入到 asp 中的方法:DataGrid
【发布时间】:2013-10-25 05:13:16
【问题描述】:

我有一个需要填充的 asp:DataGrid,而最初的开发人员创建了一个非常不灵活的奇怪包装器,因此我决定将其切换为 DataTable。唯一的问题是它用来填充我的网格的事件不喜欢我的数据表。它一直说它不能从 DataTable 转换为 DataRowView,这是有道理的。

我需要帮助找出一种将数据从我的 DataTable 传递到 dataGrid 的好方法。

这里是有问题的事件

 protected override void ReflectItem(DataGridItemEventArgs e)
  {
     if (e.Item.DataItem == null) return;

     DataTable currentItem = (DataTable)e.Item.DataItem;
     if (currentItem == null) return;

     var labelBrokerMPID = (Label)e.Item.FindControl("labelBrokerMPID");
     var labelBrokerName = (Label)e.Item.FindControl("labelBrokerName");
     var labelClearingBrokerDTC = (Label)e.Item.FindControl("labelClearingBrokerDTC");
     //var labelClearingBrokerName = (Label)e.Item.FindControl("labelClearingBrokerName");
     var linkButtonViewBroker = (LinkButton)e.Item.FindControl("linkButtonViewBroker");
     var linkButtonDeleteBroker = (LinkButton)e.Item.FindControl("linkButtonDeleteBroker");

     labelBrokerMPID.Text = currentItem.Rows[0]["BrokerMPID"].ToString();
     labelBrokerName.Text = currentItem.Rows[0]["BrokerName"].ToString();
     labelClearingBrokerDTC.Text = currentItem.Rows[0]["ClearingBrokerDTC"].ToString();
     linkButtonViewBroker.CommandArgument = currentItem.Rows[0]["RelationshipId"].ToString();
  }

显然,数据表不会飞。我发现网格有点令人沮丧,因为他们使用标签而不是绑定列。我用绑定列而不是标签重新格式化数据网格会更容易吗?或者有没有更简单的方法来传递我的数据?

到目前为止,我将数据表存储在会话变量中并将其绑定到 DataGrid。这就是这个错误出现的时候。有没有一种简单的方法可以将我的数据从数据表转换为 dataRowView?

感谢所有帮助、建议或批评!

【问题讨论】:

    标签: c# asp.net datagrid datatable asp.net-controls


    【解决方案1】:

    将标签的文本更改为

    Text='<%# Bind("BrokerMPID") %>'
    

    并注释掉了大部分事件。

    【讨论】:

      【解决方案2】:

      你快到了。您只需要将 e.Item.DataItem 转换为 DataRowView

      <asp:DataGrid ID="DataGrid1" runat="server" 
          OnItemDataBound="DataGrid1_ItemDataBound" 
          AutoGenerateColumns="false">
          <Columns>
              <asp:TemplateColumn HeaderText="Broker">
                  <ItemTemplate>
                      <asp:Label ID="labelBrokerMPID" runat="server" /> - 
                      <asp:Label ID="labelBrokerName" runat="server" />
                  </ItemTemplate>
              </asp:TemplateColumn>
          </Columns>
      </asp:DataGrid>
      
      public DataTable MyDataSource
      {
          get
          {
              var dt = new DataTable();
              dt.Columns.Add(new DataColumn("BrokerMPID", typeof (Int32)));
              dt.Columns.Add(new DataColumn("BrokerName", typeof (string)));
      
              for (int i = 0; i < 5; i++)
              {
                  var dr = dt.NewRow();
                  dr[0] = i;
                  dr[1] = "Name " + i;
                  dt.Rows.Add(dr);
              }
              return dt;
          }
      }
      
      protected void Page_Load(object sender, EventArgs e)
      {
          if (!IsPostBack)
          {
              DataGrid1.DataSource = MyDataSource;
              DataGrid1.DataBind();
          }
      }
      
      protected void DataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e)
      {
          if (e.Item.ItemType == ListItemType.Item ||
              e.Item.ItemType == ListItemType.AlternatingItem)
          {
              var dr = e.Item.DataItem as DataRowView;
      
              var labelBrokerMPID = e.Item.FindControl("labelBrokerMPID") as Label;
              labelBrokerMPID.Text = dr["BrokerMPID"].ToString();
      
              var labelBrokerName = e.Item.FindControl("labelBrokerName") as Label;
              labelBrokerName.Text = dr["BrokerName"].ToString();
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-05-17
        • 2018-07-24
        • 2015-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多