في مقال الدراسة السابقة، يمكننا استخدام DataKeyNames وDataKeys لتنفيذ الوصول إلى البيانات في عمود المفتاح الأساسي GridView، وفي التجارب اللاحقة، وجدت أنه يمكننا استخدام TemplateField لتحقيق الوصول إلى البيانات
الأخرى
<قالب العنصر>
<asp:Literal id="litUserName" runat="Server" Text='<%#Eval("UserName")%>'/>
</ItemTemplate>
</asp:TemplateField>
// تنفيذ الواجهة الخلفية
String userName = ((Literal)GridView1.SelectedRow.FindControl("litUserName")).Text;
يمكن لخاصية AutoGenerateSelectButton الخاصة بـ GridView تمكين تحديد الجدول مباشرة. إذا لم نرغب في إضافة عمود إضافي للاختيار، فيمكننا استخدام TemplateField لتنفيذ تحديد GridView
كما يلي:
<asp:BoundField DataField = "ObjectID "نص الرأس = "المعرف"/>
<asp:TemplateField>
<قالب الرأس>
اسم
</HeaderTemplate>
<قالب العنصر>
<asp:LinkButton id = "lbName" runat = "الخادم" CommandName = "تحديد">
<%#Eval("الاسم")%>
</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Status" HeaderText="Status"/>
في الوقت نفسه، نحتاج إلى إضافة معالجي الأحداث إلى GridView: RowCreated وRowCommand.
// معالجة الأحداث التي تم إنشاؤها في الصف
باطلة GridView1_RowCreated (مرسل الكائن، GridViewRowEventArgs e)
{
إذا (e.Row.RowType == DataControlRowType.DataRow)
{ ((LinkButton)e.Row.FindControl("lbName")).CommandArgument = e.Row.RowIndex.ToString();
}
}
// معالجة حدث RowCommand
باطلة GridView1_RowCommand (مصدر الكائن، System.Web.UI.WebControls.GridViewCommandEventArgs e)
{
GridView1.SelectedIndex = int.Parse(e.CommandArgument.ToString());
}
بهذه الطريقة، يمكنك الاختيار في نفس الوقت عند النقر فوق الاسم، دون الحاجة إلى استخدام عمود التحديد.