Jag har en gridview, i den har jag kommentarer som hämtas från en databas. nu har jag försökt lägga in textboxar så man kan svara på dessa kommentarer men det vill sej inte. jag får följande fel "Object reference not set to an instance of an object." på raden där jag hämtar värdet från "txtAnswer". Hur kan jag få ut text i labeln lblAnswerError? Jag tror att jag kanske kan hjälpa dig. eller så här:Findcontrol?
Jag kopierar in koden här nedan:
<code>
<asp:GridView ID="GridView1" runat="server" DataSourceID="sqlGetCustomerComments"
AutoGenerateColumns="false" ShowHeader="false" Width="95%" GridLines="None"
DataKeyNames="customerCommentID">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<div style="border:1px solid #c3bc02; margin-bottom:5px;">
<div style="background-color:#c3bc02; text-align:center;">
<h3><%#Eval("customerheader") %></h3>
</div>
<div style="margin:3px;">
<span class="regText"><%#Eval("customerMess") %></span>
<hr />
<span class="boldText">
<%#Eval("customerName") %>, <%#Eval("customerDate") %><br />
</span>
<span class="regText">
<%#Eval("customerMail") %><br />
<%#Eval("customerPage") %> </span>
<br />
<br />
<cc1:CollapsiblePanelExtender ID="CollapsiblePanelExtender1" runat="server" TargetControlID="contentPanel"
ExpandControlID="titlePanel" Collapsed="true" TextLabelID="Label1" ExpandedText="(Klicka för att gömma formulär)"
CollapseControlID="titlePanel" CollapsedText="(Klicka för att visa formulär)">
</cc1:CollapsiblePanelExtender>
<div>
<asp:Panel ID="titlePanel" runat="server">
<span class="boldText">Svara</span>
<asp:Label ID="Label1" runat="server" Text="Label">(Klicka för att visa formulär)</asp:Label>
</asp:Panel>
<asp:Panel ID="contentPanel" runat="server">
<table>
<tr>
<td>
Svar:
</td>
<td>
<asp:TextBox ID="txtAnswer" runat="server" Width="250px" TextMode="MultiLine" Height="100px" /><br />
</td>
</tr>
<tr>
<td>
<asp:Button ID="btnSendAnswer" runat="server" Text="Svara" OnClick="btnSendAnswer_Click" />
<asp:Label ID="lblAnswerError" runat="server" />
</td>
</tr>
</table>
</asp:Panel>
</div>
</div>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</code>
code behind
<code>
protected void btnSendAnswer_Click(object sender, EventArgs e)
{
CustomCommentAnswer answer = new CustomCommentAnswer();
CustomerCommentAnswerDB answerDB = new CustomerCommentAnswerDB();
string myAnswer;
myAnswer = ((TextBox)GridView1.NamingContainer.FindControl("txtAnswer")).Text;
//Label lblAnswerError = (Label)GridView1.FindControl("lblAnswerError");
answer.AnswerBy = User.Identity.Name;
answer.CustomCommentID = 1;// int.Parse(GridView1.DataKeys.ToString());
answer.Answer = myAnswer;
try
{
answerDB.AddCustomerCommentAnswer(answer);
//lblAnswerError.Text = "Det gick ju bra";
}
catch (Exception ex)
{
//lblAnswerError.Text = ex.Message;
}
}
</code>Sv: Findcontrol?
<code>
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
ViewState["Namn"] = GridView1.SelectedRow.Cells[3].Text;
}
</code>
Cellen talar om vilken information som du vill hämta.
ViewState["Namn"] gör att jag kommer åt informationen i andra classer.
Hoppas att du förstår principen.Sv:Findcontrol?
<code>
test = ((TextBox)(BPGridview.Rows[i].FindControl("txtidunik"))).Text;
</code>
där i är den raden i gridview'n som du vill hämta.