Доступ к элементам в GridView - PullRequest
0 голосов
/ 08 апреля 2011

У меня есть GridView, и я обновляю его через LINQ через C #. Я хочу получить доступ к элементам в моем GridView и сохранить их в переменной. Затем я передам эти переменные в мой запрос LINQ.

Как получить доступ к элементам в моем GridView? Вот мой код:

protected void gvShowComm_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    string productID = gvShowComm.DataKeys[e.RowIndex]["Product_ID"].ToString(); //Working!
    string planName = gvShowComm.DataKeys[e.RowIndex]["PlanName"].ToString(); //Working!
    string hiComm = gvShowComm.DataKeys[e.RowIndex]["HiCommissionOld"].ToString(); //Working!
    string lowComm = gvShowComm.DataKeys[e.RowIndex]["LowCommissionOld"].ToString(); //Working!

    gvShowComm.DataBind();
}

Markup:

<asp:GridView runat="server" Height="233px" Width="602px" ID ="gvShowComm" 
    CellPadding="4" ForeColor="#333333" GridLines="None" OnRowEditing = "gvShowComm_RowEditing" 
    OnRowUpdating = "gvShowComm_RowUpdating" 
    OnRowCancelingEdit = "gvShowComm_RowCancelingEdit" DataKeyNames = "Product_ID, PlanName, HiCommissionOld, LowCommissionOld">       
    <Columns>
        <asp:CommandField ShowCancelButton="True" ShowEditButton="True" />
    </Columns>
</asp:GridView>

Ответы [ 2 ]

2 голосов
/ 08 апреля 2011

Что-то вроде Produce_ID звучит как ключевое поле, и если это так, вы можете сделать

var keyValue =  gvShowComm.DataKeys[e.RowIndex].Value;
if(keyValue!=null)
int Product_ID = Convert.ToInt32(keyValue);

, или же

, есть e.NewValues[] и e.OldValues[], которые вы можете использовать.

1 голос
/ 08 апреля 2011

У GridViewUpdateEventArgs есть свойства, позволяющие получить коллекции Keys , OldValues ​​ и NewValues ​​ для конкретного строки.

Вы могли бы получить к нему доступ так:

protected void gvShowComm_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    //Product_ID is a column that I am displaying in my GV!
    int Product_ID = Int32.Parse(e.Keys["Product_ID"]);

    Entity_Product_Point ev = new Entity_Product_Point();

    ev.MyDateTime = DateTime.Parse(e.NewValues["MyProp"]);

    // And so on...
}

Но это отстой! ASP.Net может сделать всю работу за вас, используя один из доступных классов DataSource. Для ваших целей вы должны заглянуть в LinqDataSource

Стоит отметить, что, хотя классы DataSource могут быть полезными и приятными, в них происходит довольно много волшебства, и вы можете в значительной степени исключить возможность использования с ними любых тестируемых шаблонов. (см. WebFormsMVP )

Если это не проблема, тогда иди к этому. Но достижение четкого разделения интересов лучше в долгосрочной перспективе. В этом случае вам потребуется реализовать оболочку фасада вокруг вашей бизнес-логики и использовать ObjectDataSource .

В любом случае вам лучше, чем вручную копаться в коллекциях пар ключ / значение в поисках значений, а затем преобразовывать их обратно в соответствующие им типы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...