0

我有一个 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?

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

4

2 回答 2

1

你快到了。您只需要将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();
    }
}
于 2013-10-16T23:10:36.167 回答
0

将标签的文本更改为

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

并评论了大部分事件。

于 2013-10-16T22:07:46.710 回答