The Dataset object ds has been declared in the Form_Load function and hence no other function can use it.
So declare the Database object as a field.
Like this :
public partial class Form1 : Form
{
DataSet ds;
public Form1()
{
}
Now this ds will be available to this class's functions.
And in the form_load, just instantiate it.
private void Form1_Load(object sender, EventArgs e)
{
ds = new DataSet("authors");
}
About the CaptionText, that's because your DatagridView does not have the property CaptionText.