新手问题:为防止NullReferenceException到底需要初始化什么?我不明白变量是什么。我需要将哪个对象引用设置为哪个对象的实例?谢谢!
.aspx
<p>
<asp:GridView ID="gvConvo" runat="server" AutoGenerateColumns="False" OnSelectedIndexChanged="gvConvo_SelectedIndexChanged">
<Columns>
<asp:TemplateField HeaderText="ID">
<ItemTemplate>
<asp:LinkButton ID="lbtnConvo" OnClick="lbtnConvo_Click" Text='<%#Eval("ConvoUID") %>' runat="server">LinkButton</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Convo" HeaderText="Convo" />
<asp:BoundField DataField="ConvoDate" HeaderText="Date" />
<asp:BoundField DataField="ConvoDesc" HeaderText="Description" />
<asp:BoundField DataField="ConvoType" HeaderText="Type" />
<asp:BoundField DataField="MediaSource" HeaderText="Media Source" />
</Columns>
</asp:GridView>
</p>
<p>
</p>
<p>
Convo:
<asp:TextBox ID="txtConvoSelection" runat="server" OnTextChanged="txtConvoSelection_TextChanged"></asp:TextBox>
</p>
.cs
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string PersuasionDBCon = ConfigurationManager.ConnectionStrings["PersuasionDBCon"].ConnectionString;
using (SqlConnection con = new SqlConnection(PersuasionDBCon))
{
SqlCommand cmd = new SqlCommand("GetConvo", con);
cmd.CommandType = CommandType.StoredProcedure;
con.Open();
gvConvo.DataSource = cmd.ExecuteReader();
gvConvo.DataBind();
}
}
}
protected void lbtnConvo_Click(object sender, EventArgs e)
{
txtConvoSelection.Text = gvConvo.SelectedRow.Cells[1].Text;
}
protected void BtnSaveQuote_Click(object sender, EventArgs e)
{
}
protected void gvConvo_SelectedIndexChanged(object sender, EventArgs e)
{
}
protected void txtConvoSelection_TextChanged(object sender, EventArgs e)
{
}
这是引发异常的行:
txtConvoSelection.Text = gvConvo.SelectedRow.Cells[1].Text;
答案 0 :(得分:2)
用于加载网格的代码被if (!IsPostBack){}
块包围。你猜怎么了?按钮单击事件导致回发。这就是它的运行方式。每次执行回发时,整个页面都会从头开始。这就是HTTP的工作方式。
因此,当您单击按钮时,网格的数据未绑定,并且没有选定的行。
对此的最佳解决方案是使这种情况发生在javascript中,而不是C#中。为服务器上确实需要做的事情保留服务器事件。这将极大地提高感知性能(无需等待往返于可能遥远的服务器的往返路程),并且无需重新构建整个html文档即可进行简单的更改,从而帮助您的服务器扩展以处理更多用户。 / p>
答案 1 :(得分:0)
索引从0开始
gvConvo.SelectedRow.Cells[1]
此字段必须为空
尝试
gvConvo.SelectedRow.Cells[0]
还要检查gvConvo.SelectedRow
网格中可能没有选择