आप अपने GridView
को बाध्यकारी कैसे कर रहे हैं? क्या आप डेटास्रोत नियंत्रण का उपयोग कर रहे हैं? यदि आप Page_Load
के दौरान मैन्युअल रूप से बाध्यकारी हैं, तो यह संभव है कि ग्रिड हर राउंड ट्रिप को बाध्यकारी कर रहा है, इसलिए ईवेंट हैंडलर ठीक से पकड़ नहीं रहा है।
protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack)
{
//do binding
}
}
आप नमूना पोस्ट कर सकते हैं अपने मार्कअप साथ जाने के लिए कोड बाध्यकारी: यदि यह मामला है, आप की तरह कुछ का उपयोग करना चाहेंगे?
यदि आप वास्तव में समस्या को मजबूर करना चाहते हैं, तो आप ग्रिड पर रोडाटाबाउंड ईवेंट में हुक कर सकते हैं, बटन को मैन्युअल रूप से ढूंढ सकते हैं और कोड को पीछे कोड में जोड़ सकते हैं। कुछ की तरह:
मार्कअप टुकड़ा:
<asp:GridView ID="gvTest" runat="server" OnRowDataBound="gvTest_RowDataBound" />
कोड के पीछे:
protected void gvTest_RowDataBound(object sender, GridViewRowEventArgs e)
{
if(e.Row.RowType == DataControlRowType.DataRow)
{
//find button in this row
LinkButton button = e.Row.FindControl("DeleteButton") as button;
if(button != null)
{
button.Click += new EventHandler("DeleteButton_Click");
}
}
}
protected void DeleteButton_Click(object sender, EventArgs e)
{
LinkButton button = (LinkButton)sender;
// do as needed based on button.
}
मुझे यकीन है कि क्या बटन का उद्देश्य है नहीं कर रहा हूँ, लेकिन यह एक पंक्ति बटन को हटाना है यह सोचते हैं, तो आप हो सकता है कि इस दृष्टिकोण को ईवेंट हैंडलर में नहीं लेना चाहें, आपके पास प्रश्न में पंक्ति तक सीधी पहुंच नहीं है, जैसे आप RowCommand
ईवेंट का उपयोग करेंगे।
क्या कोई कारण है कि आप टेम्पलेट फ़ील्ड का उपयोग कर रहे हैं? बनाम ButtonField
कहता है?यदि आप ButtonField
का उपयोग करते हैं, तो आप RowCommand
ईवेंट में हुक कर सकते हैं।
मार्कअप टुकड़ा:
<asp:GridView ID="gvTest" runat="server" OnRowCommand="gvTest_RowCommand">
<columns>
<asp:buttonfield buttontype="Link" commandname="Delete" text="Delete"/>
....
</columns>
</asp:GridView>
पीछे कोड:
protected void gvTest_RowCommand(object sender, GridViewCommandEventArgs e)
{
if(e.CommandName == "Delete")
{
//take action as needed on this row, for example
int rowIndex = Convert.ToInt32(e.CommandArgument);
GridViewRow currentRow = (sender as GridView).Rows[rowIndex];
//do something against the row...
}
}
आप इन विषयों में से कुछ पर MSDN डॉक्स परामर्श करने के लिए चाहते हो सकता है
संपादित करें:
ButtonField पर आपके प्रश्न का उत्तर देने के लिए - हाँ मैं क्यों आप अभी भी एक buttonfield के साथ सौदा नहीं कर सकता है नहीं दिख रहा। यहाँ एक टुकड़ा बाध्य पंक्ति डेटा दौरान buttonfield खोजने के लिए और इसे छिपाने के लिए है (अपरीक्षित लेकिन मुझे लगता है काम करेगा ...)
protected void gvTest_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
//let's assume your buttonfield is in column 1
// (you'd know this based on your markup...)
DataControlFieldCell cell = e.Row.Cells[1] as DataControlFieldCell;
if(cell != null)
{
ButtonField field = cell.ContainingField as ButtonField;
//based on your criteria, show or hide the button
field.Visible = false;
//or
field.Visible = true;
}
}
}
एक ButtonField का उपयोग करना, वहाँ एक रास्ता प्रोग्राम के रूप में छिपाने या दिखाने के लिए है? मौजूदा पुनरावृत्ति में कुछ मूल्यों के आधार पर, मैं या कई बटन नहीं दिखा सकता हूं। मैंने जो कुछ भी पढ़ा, उसे कहा कि मुझे टेम्पलेटफिल्ड में एक मानक बटन पर स्विच करना पड़ा। मेरी वर्तमान विधि के साथ, मैं वर्तमान पुनरावृत्ति की जांच करने के लिए RowDataBound ईवेंट का उपयोग कर रहा हूं, बटन ढूंढ सकता हूं, और संभावित रूप से इसे छुपा सकता हूं। – Deane
मुझे लगता है कि यह निश्चित रूप से संभव होगा। नमूना कोड संलग्न के साथ मेरा जवाब संपादित किया। –