이벤트 의 GridView
셀에 이미있는 항목 앞에 텍스트를 추가하려고합니다 RowDataBound
.
protected void gvPatientSearch_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DataRow dr = ((DataRowView)e.Row.DataItem).Row;
if (Convert.ToBoolean(dr["Confidential"]))
{
String name = String.Copy(e.Row.Cells[1].Text);
//the problem is the following line
e.Row.Cells[1].Text = "<b><font color='red'>!</font></b>" + name;
}
}
}
어떤 이유로 내가 무엇을하든 원본 텍스트가 삭제되는 것 같습니다. 주석 아래의 줄을 제거하면 이름이 느낌표없이 정상적으로 표시됩니다. 추가 코드를 추가하면 어떤 이유로 원본 텍스트가 빈 문자열이되고 느낌표 만 표시됩니다. 나는 이것을 사용하거나 사용하지 않고 이것을 시도했습니다 String.Copy
-나는 이것이 필요하다고 생각하지 않았지만 혹시라도 시도해 볼 것이라고 생각했습니다. 불운.
관련성이 없다고 생각하지만 행의 첫 번째 열은 1 또는 0을 포함하는 숨겨진 열입니다. 값이 1이면 느낌표를 추가하고 싶습니다. 데이터가 있고이 부분이 올바르게 호출되고 있습니다. 이름을 그대로 유지할 수 없습니다.
왜 이런 일이 일어날 지 아이디어가 있습니까?
편집 : 아래 프런트 엔드 코드
<asp:GridView ID="gvPatientSearch" runat="server" Width="100%" CellPadding="4" ForeColor="#333333" GridLines="None" AllowPaging="True" AllowSorting="True"
PageSize="25" OnPageIndexChanging="gvPatientSearch_PageIndexChanging" OnSorting="gvPatientSearch_Sorting" OnRowDataBound="gvPatientSearch_RowDataBound"
AutoGenerateColumns="false" PagerSettings-Position="TopAndBottom" PagerStyle-HorizontalAlign="Right" PagerSettings-Mode="NumericFirstLast" PagerSettings-PageButtonCount="5"
PagerSettings-FirstPageText=" First " PagerSettings-LastPageText=" Last " PagerSettings-PreviousPageText=" Previous " PagerSettings-NextPageText=" Next ">
<AlternatingRowStyle BackColor="White" />
<EditRowStyle BackColor="#2461BF" />
<FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#2461BF" ForeColor="White" />
<RowStyle BackColor="#EFF3FB" />
<SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
<SortedAscendingCellStyle BackColor="#F5F7FB" />
<SortedAscendingHeaderStyle BackColor="#6D95E1" />
<SortedDescendingCellStyle BackColor="#E9EBEF" />
<SortedDescendingHeaderStyle BackColor="#4870BE" />
<Columns>
<asp:BoundField HeaderText="Confidential" DataField="Confidential" ItemStyle-CssClass="hiddencol" HeaderStyle-CssClass="hiddencol"></asp:BoundField>
<asp:HyperLinkField DataTextField="PatientName" DataNavigateUrlFields="PatientIdInternal" DataNavigateUrlFormatString="PatientProfile.aspx?InternalID={0}" HeaderText="Patient Name"
SortExpression="PatientName" />
<asp:BoundField DataField="PatientID" HeaderText="Patient ID" SortExpression="PatientID" />
<asp:BoundField DataField="AccountNumber" HeaderText="Account Number" SortExpression="AccountNumber" />
<asp:BoundField DataField="DateOfBirth" HeaderText="Date Of Birth" SortExpression="DateOfBirth" DataFormatString="{0:d}" />
<asp:BoundField DataField="PracticeName" HeaderText="Practice Name" SortExpression="PracticeName" />
<asp:BoundField DataField="PatientIdInternal" HeaderText="Internal ID" SortExpression="PatientIdInternal" Visible="false" />
</Columns>
</asp:GridView>
코드의이 부분에서 Visual Studio에서 올바르게 표시되는 다른 모든 필드의 값을 볼 수 있으며 수정하려는 이름 필드 만 빈 문자열로 표시됩니다.
A HyperLinkField
는 하이퍼 링크 컨트롤로 렌더링되므로 셀의 텍스트를 직접 검색 할 수 없습니다. 텍스트를 원하면 셀이 아닌 컨트롤 에서 텍스트를 검색해야합니다 .
HyperLink myLink = e.Row.Cells[1].Controls[0] as HyperLink;
String name = myLink.text;
대안은 DataBinder.Eval(e.Row.DataItem, "name")
코드 숨김에서 수행하여 데이터 소스에서 직접 이름을 가져 오는 것 입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다