IT TIP

열 (GridView)을 숨기지 만 여전히 해당 값에 액세스하는 방법은 무엇입니까?

itqueen 2020. 10. 30. 21:20
반응형

열 (GridView)을 숨기지 만 여전히 해당 값에 액세스하는 방법은 무엇입니까?


DataSource(SQL 데이터베이스) 가있는 GridView가 있습니다. 열을 숨기고 싶지만 레코드를 선택할 때 값에 계속 액세스 할 수 있습니다. 누군가이 작업을 수행하는 방법을 보여줄 수 있습니까?

이것은 숨기고 싶지만 여전히 그 값에 액세스하려는 열입니다.

<asp:BoundField DataField="Outlook_ID" HeaderText="OutlookID" />

열 (속성 Visible="false") 을 숨기려고 모든 것을 시도했지만 그 값에 액세스 할 수 없습니다.


내가 착각 GridView하지 않으면 BoundColumns속성이있는 값을 보유하지 않습니다 visible="false". 여기서 두 가지 작업을 수행 할 수 있습니다. 하나는 V4Vendetta의 답변에 설명되어 있습니다 Datakeys. 또는 당신은 당신을 변경할 수 있습니다 BoundColumnA를 TemplateField. 그리고에서 ItemTemplate같은 컨트롤을 추가 Label하고 가시성을 거짓으로 만들고 그 값을 부여하십시오 Label.


<head runat="server">
<title>Accessing GridView Hidden Column value </title>
<style type="text/css">
  .hiddencol
  {
    display: none;
  }
</style>

<asp:BoundField HeaderText="Email ID" DataField="EmailId" ItemStyle-CssClass="hiddencol" HeaderStyle-CssClass="hiddencol" >
</asp:BoundField>

ArrayList EmailList = new ArrayList();
foreach (GridViewRow itemrow in gvEmployeeDetails.Rows)
{
  EmailList.Add(itemrow.Cells[YourIndex].Text);
}

CSS에서 스타일을 정의합니다.

.hiddencol { display: none; }

그런 다음 그리드 필드에 ItemStyle-CssClass="hiddencol"HeaderStyle-CssClass="hiddencol"속성을 추가합니다 .

<asp:BoundField DataField="ID" HeaderText="ID" ItemStyle-CssClass="hiddencol"  HeaderStyle-CssClass="hiddencol" ClientIDMode="Static" />

이러한 필드의 값을 검색하는 데 DataKeys사용할 수 있습니다. (말했듯이) normal BoundField을 visible false로 설정하면 값을 얻을 수 없기 때문입니다.

에서 .aspx파일에 설정된 GridView속성을

DataKeyNames = "Outlook_ID"

이제 이벤트 핸들러에서 다음과 같이이 키의 값에 액세스 할 수 있습니다.

grid.DataKeys[rowIndex]["Outlook_ID"]

그리드의 지정된 rowindex에있는 ID를 제공합니다.


프로그래밍 방식으로 수행 할 수 있습니다.

grid0.Columns[0].Visible = true;
grid0.DataSource = dt;
grid0.DataBind();
grid0.Columns[0].Visible = false;

이러한 방식으로 데이터 바인딩 전에 열을 표시하도록 설정하여 열이 생성됩니다. 열을 표시하지 않도록 설정 했으므로 표시되지 않습니다.


당신이이있는 경우 TemplateField귀하의 열이 내부를 GridView하고있다, 말, 제어라는 ㅋ ㅋ는 바인딩. 그런 다음 outlook_idas a를 HiddenField다음과 같이 배치하십시오 .

<asp:TemplateField HeaderText="OutlookID">
    <ItemTemplate>
        <asp:Label ID="blah" runat="server">Existing Control</asp:Label>
        <asp:HiddenField ID="HiddenOutlookID" runat="server" Value='<%#Eval("Outlook_ID") %>'/>
    </ItemTemplate>
</asp:TemplateField>

이제 원하는 이벤트의 행을 잡고 outlook_id컨트롤에 액세스합니다.
대한 RowDataBound액세스가 좋아 :

string outlookid = ((HiddenField)e.Row.FindControl("HiddenOutlookID")).Value;

클릭 한 행에 액세스하는 데 문제가 있으면 돌아가십시오. 그리고 그것에 액세스하고 싶은 이벤트를 언급하는 것을 잊지 마십시오.


hidden서버 측 에서 열 만들 수 있으며 어떤 이유로 aspx코드 를 수행하는 것과 다릅니다 . 보이는 것처럼 여전히 참조 될 수 있습니다. OnDataBound이벤트 에이 코드를 추가하기 만하면 됩니다.

protected void gvSearchResults_DataBound(object sender, EventArgs e)
{
    GridView gridView = (GridView)sender;

    if (gridView.HeaderRow != null && gridView.HeaderRow.Cells.Count > 0)
    {
        gridView.HeaderRow.Cells[UserIdColumnIndex].Visible = false;
    }

    foreach (GridViewRow row in gvSearchResults.Rows)
    {
        row.Cells[UserIdColumnIndex].Visible = false;
    }
}

을 채우기 전에 볼 열을 남겨주세요 GridView. GridView열을 채운 다음 숨 깁니다.


다음은 GridView로 설정된 의 숨겨진 열 값을 가져 오는 방법 Visible=False입니다.이 경우 데이터 필드를 SpecialInstructions바인딩 된 GridView의 DataKeyNames 속성에 추가하고이 방법으로 액세스합니다.

txtSpcInst.Text = GridView2.DataKeys(GridView2.SelectedIndex).Values("SpecialInstructions")

That's it, it works every time very simple.


I have a new solution hide the column on client side using css or javascript or jquery.

.col0
{
  display: none;
}

And set gvClientDetails.Columns[0].Visible = true; , If you set to false.


I used a method similar to user496892:

SPBoundField hiddenField = new SPBoundField();
hiddenField.HeaderText = "Header";
hiddenField.DataField = "DataFieldName";
grid.Columns.Add(hiddenField);

grid.DataSource = myDataSource;
grid.DataBind();

hiddenField.Visible = false;

You can do it code behind.

Set visible= false for columns after data binding . After that you can again do visibility "true" in row_selection function from grid view .It will work!!


When I want access some value from GridView before GridView was appears.

  1. I have a BoundField and bind DataField nomally.
  2. In RowDataBound event, I do some process in that event.
  3. Before GridView was appears I write this:

    protected void GridviewLecturer_PreRender(object sender, EventArgs e) 
    {
        GridviewLecturer.Columns[0].Visible = false;
    }
    

참고URL : https://stackoverflow.com/questions/5376278/how-to-hide-a-column-gridview-but-still-access-its-value

반응형