从gridview获取底层ObjectDataSource

时间:2012-04-11 03:27:04

标签: c# asp.net datagridview

我有一个绑定到ObjectDataSource的gridview,包括一个复选框,用于选择网格中的项目。

在CheckChanged事件中,我有一些代码如下:

       //Clear the existing selected row
        foreach (GridViewRow oldrow in uxRaceList.Rows)
        {
            var otherOpt = (RadioButton)oldrow.FindControl("rdbRaceNum");
            if (otherOpt != sender)
                otherOpt.Checked = false;
        }

        //Set the new selected row
        RadioButton rb = (RadioButton)sender;
        GridViewRow row = (GridViewRow)rb.NamingContainer;
        ((RadioButton)row.FindControl("rdbRaceNum")).Checked = true;

既然我有对GridViewRow的引用,我是否有可能获得我的OrigionalDataSourceObject?

我知道我可以查看网格中显示的数据:

_selectedRaceNum = Convert.ToInt32(rb.Text.Substring(0, 1));

但我想要的是:

var odsMyobject = row.DataItem as MyCustomObject;

我知道我可以在网格中存储一个ID并使用它来回顾我的数据库以获取数据,但我想避免再次往返数据。

也许我可以以某种方式向ObjectDataSource询问对象?

感谢。

2 个答案:

答案 0 :(得分:0)

  

你的问题 - 既然我有对GridViewRow的引用,对我来说是否可能   得到我的OrigionalDataSourceObject?

GridView结束时DataSource Object DisposedPage Life Cycle。加载Quick Watch后,您可以在Postback期间通过Page进行检查。


  

你的问题 - 我知道我可以在网格中存储一个ID并使用它来回顾我的   数据库获取数据,但我想避免另一次往返   数据

您可以选择在ViewState期间将数据保存在Session / Postback中。如果只是将数据保存在同一页面中,则只应考虑ViewState


  

你的问题 - 但我想要的是:

     

var odsMyobject = row.DataItem as MyCustomObject;

您可以在DataKeys中使用GridView,然后您可以使用已使用RowIndex计算的NamingContainer轻松访问该Bind。另一个选项/备选方案是隐藏控件并Property与您的((ControlType)row.FindControl("ControlID")). 和访问此控件,如下所示。

{{1}}

答案 1 :(得分:0)

我可能会误解你的问题,但是如果你想将数据对象绑定到特定的GridViewRow,你应该能够使用DataItem属性来获取它。

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridviewrow.dataitem.aspx

  

获取GridViewRow对象所在的基础数据对象   界。