需要帮助搞清楚的方式将数据输入到一个asp:DataGrid中(Need help figuring

2019-11-02 14:01发布

我有一个asp:DataGrid中我需要填充,和原来的开发人员创建一个奇怪的包装用很少的灵活性,所以我已经决定了其切换到数据表来代替。 唯一的问题是,它使用来填充我的网格不喜欢我的DataTable的事件。 它口口声声说,它不能从一个DataTable转换成DataRowView的,这是有道理的。

我需要帮助figureing从我的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。 这就是这个错误棱时。 有没有一种简单的方法,以我的数据从一个DataTable转换成DataRowView的?

所有帮助,建议,或critisims是赞赏!

Answer 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();
    }
}


Answer 2:

改变文本的标签

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

和注释掉了大部分的事件。



文章来源: Need help figuring out a way to input data into an asp:DataGrid