I did a quick test with following code, and it works all good:
var dictioneryState = new Dictionary<int, string>();
for (int i = 0; i < 5; i++)
{
dictioneryState.Add(i, "value" + i.ToString());
}
ddlState.DataTextField = "Value";
ddlState.DataValueField = "Key";
ddlState.DataSource = dictioneryState;
ddlState.DataBind();
ddlState.Items.Insert(0, new ListItem("[Select]", "-1"));
ddlState.Items[0].Selected = true;
Please check the values being transferred from database.