我正在尝试将我的MySQL数据库中的信息(用户评论)显示为另一种形式的文本框。我正在使用datagridview来选择UID以识别注释所针对的用户。我的代码在Comment表单的load事件中,就像这样......
try
{
// Check if a row is selected.
string cRow = admin.gridClients.CurrentRow.Cells[0].Value.ToString();
string Query = "SELECT Admin_Com FROM cpr_clients WHERE Client_ID='" + cRow + "';";
MySqlConnection myConn = new MySqlConnection(strConnect);
MySqlCommand myCmd = new MySqlCommand(Query, myConn);
MySqlDataReader myReader;
myConn.Open();
myReader = myCmd.ExecuteReader();
while (myReader.Read())
{
txtAdminCom.Text = myReader["Admin_Com"].ToString();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
编辑:我已经更新了我的代码。即使我选择了另一行,代码也只检索datagridview中第一行的注释。
答案 0 :(得分:0)
可能您的问题是源(CurrentRow
)网格视图上没有admin.gridClients
。这将导致尝试访问.Cells
以引发您获得的错误,因为CurrentRow == null
。
由于仅需要此值来标识frmAdminComment
中的ID,请阅读源表单中的值,然后将其传递给frmAdminComment
的构造函数:
private string _id;
public frmAdminComment(string id)
{
// Initialization code you already have.
// Set the Id for this instance.
_id = id;
}
现在引用加载方法中的_id
变量:
string Query = "SELECT Admin_Com FROM cpr_clients WHERE Client_ID='" + _id + "';";
这会在创建admin
的{{1}}对象中检查有效值的负担。
frmAdminComment
您可能需要考虑使用// In the "admin" object.
if (gridClients.CurrentRow == null)
{
MessageBox.Show("No CurrentRow is set in the source grid.");
return;
}
else
{
// CurrentRow is set - safe to reference it.
var adminComment = new frmAdminComment(gridClients.CurrentRow.Cells[0].Value.ToString());
adminComment.Show();
}
属性。它会像这样工作:
SelectedRows
请注意,如果您使用// Check if a row is selected.
// In the "admin" object.
if (gridClients.SelectedRows.Length == 0)
{
MessageBox.Show("No rows selected in the source grid.");
}
else
{
// CurrentRow is set - safe to reference it.
var adminComment = new frmAdminComment(gridClients.SelectedRows[0].Cells[0].Value.ToString());
adminComment.Show();
}
,则可能需要在SelectedRows
上设置属性,以便在选择模式设置为FullRowSelect的情况下,一次只能选择一行。