需要帮助找出一种将数据输入到asp:DataGrid中的方法 [英] Need help figuring out a way to input data into an asp:DataGrid
问题描述
我需要帮助,将数据从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();
}
显然,Datatables不飞。我发现网格有点令人沮丧,因为他们使用标签而不是绑定列。使用绑定列而不是标签重新格式化数据网格会更容易吗?或者有更简单的方法来传递我的数据?
到目前为止,我将datatable存储在一个会话变量中,并将其绑定到DataGrid。那就是这个错误。有没有一个简单的方法来将我的数据从datatable转换为dataRowView?
所有的帮助,建议或critisims都赞赏!
你几乎在那里您只需将 e.Item.DataItem 转换为 DataRowView 。
< asp: DataGrid ID =DataGrid1runat =server
OnItemDataBound =DataGrid1_ItemDataBound
AutoGenerateColumns =false>
<列>
< asp:TemplateColumn HeaderText =Broker>
< ItemTemplate>
< asp:Label ID =labelBrokerMPIDrunat =server/> -
< asp:Label ID =labelBrokerNamerunat =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))); (int i = 0; i< 5; i ++)
{
var dr = dt.NewRow();
dr [0] = i;
dr [1] =名称+ 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();
}
}
I have an asp:DataGrid I need to populate, and the original developer created a weird wrapper with very little flexibility, so I have decided to switch it over to a DataTable instead. The only issue is the event that it uses to populate my grid does not like my datatables. It keeps saying that it cannot convert from a DataTable to a DataRowView, which makes sense.
I need help figureing a good way to pass the data from my DataTable into the dataGrid.
Here is the event in question
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();
}
Obviously the Datatables don't fly. I find the grid a bit frustrating since they used labels as opposed to bound columns. Would it be easier for me to reformat the data grid with bound columns as opposed to labels? Or is there an easier way to pass in my data?
As of now I store my datatable in a session variable and bind it to the DataGrid. That is when this error arrises. Is there an easy way to convert my data from a datatable to a dataRowView?
All help, advice, or critisims are appreciated!
You are almost there. You just need to cast e.Item.DataItem to 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();
}
}
这篇关于需要帮助找出一种将数据输入到asp:DataGrid中的方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!