需要帮助找出一种将数据输入到asp:DataGrid中的方法 [英] Need help figuring out a way to input data into an asp:DataGrid

查看:170
本文介绍了需要帮助找出一种将数据输入到asp:DataGrid中的方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个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 linkBut​​tonViewBroker =(LinkBut​​ton)e.Item.FindControl(linkBut​​tonViewBroker);
var linkBut​​tonDeleteBroker =(LinkBut​​ton)e.Item.FindControl(linkBut​​tonDeleteBroker);

labelBrokerMPID.Text = currentItem.Rows [0] [BrokerMPID]。ToString();
labelBrokerName.Text = currentItem.Rows [0] [BrokerName]。ToString();
labelClearingBrokerDTC.Text = currentItem.Rows [0] [ClearingBrokerDTC]。ToString();
linkBut​​tonViewBroker.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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆