2011-04-08 7 views
0

저는 GridView를 가지고 있으며 C#을 통해 LINQ를 통해 업데이트하고 있습니다. GridView의 요소에 액세스하여 변수에 저장하려고합니다. 그런 다음이 변수를 LINQ 쿼리에 전달합니다.GridView에서 항목에 액세스

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(); 
} 

마크 업 :

<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> 
+0

그리드가 autogeneratecolumns, bound field 또는 tremplate 필드를 통해 바인딩되는지 언급하십시오. 또한 Gridview에서 DataKeyNames를 설정했는지 여부 – naveen

답변

1

GridViewUpdateEventArgs에는 특정 행에 대한 Keys, OldValuesNewValues 모음을 가져올 수있는 속성이 있습니다. 그래서 같은

당신 은 수 액세스합니다 :하지만이 꽤 하드 짜증

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 참조)

걱정할 필요가 없다면 이동하십시오. 그러나 장기적인 관점에서 우려를 깨끗하게 분리하는 것이 더 낫습니다. 이 경우 비즈니스 로직을 둘러싼 facade 래퍼를 구현하고 ObjectDataSource을 사용해야합니다.

키/값 쌍 콜렉션에서 수동으로 값을 찾고 올바른 유형으로 변환하는 것보다 나을 것이 좋습니다.

+0

LDS에서 내 값을 업데이트하는 곳이 2 개인 DB가 있습니다 .1 대 1로만 업데이트 할 수 있습니다. 그게 내가 열심히 그것을 코딩 싶어 이유입니다. –

2

Produce_ID 같은 뭔가 키 필드 같은 소리하고 있는지, 당신이 할 수있는

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

또는 다른

사용할 수있는 e.NewValues[]e.OldValues[]이 있습니다.

+0

나는 이것을 시험해 보았다. 이 오류가 발생합니다 : 색인 범위를 벗어났습니다. 음수가 아니어야하며 콜렉션의 크기보다 작아야합니다. 매개 변수 이름 : 색인 –

+1

+1. @Nice_Name : Gridviews 마크 업에서 Product_ID를 DataKeyNames로 정의합니다. – naveen

관련 문제