我有一个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?
所有帮助,建议或批评都表示赞赏!
答案 0 :(得分: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();
}
}
答案 1 :(得分:0)
将标签的文字更改为
Text='<%# Bind("BrokerMPID") %>'
并评论了大部分事件。